57 lines
1.7 KiB
Bash
Executable File
57 lines
1.7 KiB
Bash
Executable File
#!/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 "=================================="
|