#!/usr/bin/env bash set -euo pipefail if [[ $# -ne 1 ]]; then echo "Usage: $0 backups/postgres/flockpal-YYYYMMDDTHHMMSSZ.dump" >&2 exit 2 fi backup_path="$1" compose_file="${COMPOSE_FILE:-docker-compose.prod.yml}" restore_db="flockpal_restore_test_$(date -u +%Y%m%d%H%M%S)" if [[ ! -f "$backup_path" ]]; then echo "Backup file not found: $backup_path" >&2 exit 2 fi cleanup() { docker compose -f "$compose_file" exec -T postgres sh -c "dropdb -U \"\$POSTGRES_USER\" --if-exists \"$restore_db\"" >/dev/null } trap cleanup EXIT docker compose -f "$compose_file" exec -T postgres sh -c "createdb -U \"\$POSTGRES_USER\" \"$restore_db\"" docker compose -f "$compose_file" exec -T postgres sh -c "pg_restore -U \"\$POSTGRES_USER\" -d \"$restore_db\" --no-owner --no-privileges" < "$backup_path" docker compose -f "$compose_file" exec -T postgres sh -c "psql -U \"\$POSTGRES_USER\" -d \"$restore_db\" -v ON_ERROR_STOP=1 -c 'SELECT COUNT(*) AS workspaces FROM workspaces;'" echo "Restore test passed for $backup_path"