#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" cd "$ROOT_DIR" ENV_FILE="${1:-.env.prod}" BACKUP_FILE="${2:-}" if [[ ! -f "$ENV_FILE" ]]; then echo "Missing env file: $ENV_FILE" >&2 exit 1 fi if [[ -z "$BACKUP_FILE" || ! -f "$BACKUP_FILE" ]]; then echo "Usage: $0 " >&2 exit 1 fi set -a # shellcheck disable=SC1090 source "$ENV_FILE" set +a : "${POSTGRES_USER:?POSTGRES_USER is required}" : "${POSTGRES_DB:?POSTGRES_DB is required}" docker compose --env-file "$ENV_FILE" -f docker-compose.prod.yml up -d --wait postgres docker compose --env-file "$ENV_FILE" -f docker-compose.prod.yml exec -T postgres \ psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$POSTGRES_DB' AND pid <> pg_backend_pid();" >/dev/null cat "$BACKUP_FILE" | docker compose --env-file "$ENV_FILE" -f docker-compose.prod.yml exec -T postgres \ pg_restore -U "$POSTGRES_USER" -d "$POSTGRES_DB" --clean --if-exists --no-owner --no-privileges echo "Restore complete: $BACKUP_FILE -> $POSTGRES_DB"