#!/bin/bash # OpenCand Database Backup Script # This script creates a backup of the PostgreSQL database (excluding materialized views) set -e # Exit on any error # Configuration DB_CONTAINER="opencand_db" DB_NAME="opencand" DB_USER="root" BACKUP_FILE="backup_$(date +%Y%m%d_%H%M%S).sql" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${YELLOW}💾 OpenCand Database Backup Script${NC}" echo "==================================" # Check if Docker is running if ! docker info >/dev/null 2>&1; then echo -e "${RED}❌ Error: Docker is not running or not accessible${NC}" exit 1 fi # Check if the database container is running if ! docker ps --format "table {{.Names}}" | grep -q "^${DB_CONTAINER}$"; then echo -e "${RED}❌ Error: Database container '${DB_CONTAINER}' is not running${NC}" echo "Please start the services with: docker-compose up -d" exit 1 fi echo -e "${YELLOW}📋 Creating backup (excluding materialized views)...${NC}" # Get list of materialized views MATVIEWS=$(docker exec $DB_CONTAINER psql -U $DB_USER -d $DB_NAME -Atc "SELECT schemaname || '.' || matviewname FROM pg_matviews;") # Build exclude flags for pg_dump EXCLUDE_FLAGS="" for mv in $MATVIEWS; do EXCLUDE_FLAGS+=" --exclude-table=$mv" done # Run pg_dump excluding materialized views if docker exec $DB_CONTAINER pg_dump -U $DB_USER -d $DB_NAME $EXCLUDE_FLAGS > "$BACKUP_FILE"; then echo -e "${GREEN}✅ Backup created: $BACKUP_FILE${NC}" else echo -e "${RED}❌ Error: Failed to create backup${NC}" exit 1 fi echo -e "${GREEN}🎉 Backup completed successfully!${NC}" echo "=================================="