#!/bin/sh # Database Restore Script for SEEN # Restores database from a backup file set -e # Check if backup file is provided if [ -z "$1" ]; then echo "Usage: $0 " echo "" echo "Available backups:" ls -lh /backups/seen_backup_*.sql.gz 2>/dev/null || echo "No backups found" exit 1 fi BACKUP_FILE="$1" # Check if backup file exists if [ ! -f "${BACKUP_FILE}" ]; then echo "ERROR: Backup file not found: ${BACKUP_FILE}" exit 1 fi echo "[$(date)] Starting database restore from: ${BACKUP_FILE}" echo "WARNING: This will overwrite the current database!" read -p "Are you sure you want to continue? (yes/no): " CONFIRM if [ "${CONFIRM}" != "yes" ]; then echo "Restore cancelled" exit 0 fi # Drop existing connections echo "[$(date)] Terminating existing connections..." PGPASSWORD="${POSTGRES_PASSWORD}" psql \ -h "${POSTGRES_HOST}" \ -U "${POSTGRES_USER}" \ -d postgres \ -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '${POSTGRES_DB}' AND pid <> pg_backend_pid();" # Drop and recreate database echo "[$(date)] Recreating database..." PGPASSWORD="${POSTGRES_PASSWORD}" psql \ -h "${POSTGRES_HOST}" \ -U "${POSTGRES_USER}" \ -d postgres \ -c "DROP DATABASE IF EXISTS ${POSTGRES_DB};" PGPASSWORD="${POSTGRES_PASSWORD}" psql \ -h "${POSTGRES_HOST}" \ -U "${POSTGRES_USER}" \ -d postgres \ -c "CREATE DATABASE ${POSTGRES_DB};" # Restore backup echo "[$(date)] Restoring backup..." gunzip -c "${BACKUP_FILE}" | PGPASSWORD="${POSTGRES_PASSWORD}" psql \ -h "${POSTGRES_HOST}" \ -U "${POSTGRES_USER}" \ -d "${POSTGRES_DB}" if [ $? -eq 0 ]; then echo "[$(date)] Restore completed successfully!" else echo "[$(date)] ERROR: Restore failed!" exit 1 fi