#!/bin/bash set -x # ========================================================== # CONFIGURATION # ========================================================== CONTAINER_NAME="postgresql18" PG_HOST="localhost" PG_PORT="5432" PG_USER="vladimir.buzalka" export PGPASSWORD="Vlado7309208104++" # Cesta k záloze kterou chceš obnovit # Lze předat jako argument, nebo nechá najít nejnovější # Např: $0 /mnt/user/Backup/Critical/PostgreSQLBackup/tower/2026-05-23_0200 BACKUP_DIR="$1" BASE_PATH="/mnt/user/Backup/Critical/PostgreSQLBackup/tower" # ========================================================== # FIND BACKUP # ========================================================== if [ -z "$BACKUP_DIR" ]; then echo "No backup path specified - using latest available backup" BACKUP_DIR=$(ls -td "$BASE_PATH"/*/ 2>/dev/null | head -1) if [ -z "$BACKUP_DIR" ]; then echo "ERROR: No backups found in $BASE_PATH" exit 1 fi fi if [ ! -d "$BACKUP_DIR" ]; then echo "ERROR: Backup directory does not exist: $BACKUP_DIR" exit 1 fi BACKUP_FILE="$BACKUP_DIR/all_databases.sql.gz" if [ ! -f "$BACKUP_FILE" ]; then echo "ERROR: Backup file not found: $BACKUP_FILE" exit 1 fi echo "Starting PostgreSQL restore from: $BACKUP_FILE" echo "Backup date: $(stat -c %y "$BACKUP_FILE" | cut -d' ' -f1-2)" echo "Backup size: $(du -h "$BACKUP_FILE" | cut -f1)" START_TS=$(date '+%Y-%m-%d %H:%M:%S') ERR_FILE="$BACKUP_DIR/all_databases.restore.err" # ========================================================== # RESTORE # pg_dumpall dump se obnovuje přes psql # --clean + --if-exists v dumpu zajišťuje drop před recreate # ========================================================== echo "Restoring all databases to PostgreSQL..." gunzip -c "$BACKUP_FILE" \ | docker exec -i \ -e PGPASSWORD="$PGPASSWORD" \ "$CONTAINER_NAME" \ psql \ --host="$PG_HOST" \ --port="$PG_PORT" \ --username="$PG_USER" \ --dbname="postgres" \ 2> "$ERR_FILE" RESTORE_EXIT=${PIPESTATUS[1]} # ========================================================== # VALIDATION # ========================================================== if [ $RESTORE_EXIT -eq 0 ]; then echo "SUCCESS: All databases restored successfully" rm -f "$ERR_FILE" else echo "ERROR: Restore failed" echo "Exit code: $RESTORE_EXIT" echo "Error output:" [ -s "$ERR_FILE" ] && cat "$ERR_FILE" || echo " (no stderr output)" fi echo "------------------------------------------" echo "Restore task completed at $(date)" echo "Started at: $START_TS" set +x