28 lines
1.0 KiB
Bash
Executable File
28 lines
1.0 KiB
Bash
Executable File
#!/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"
|