Files
MobilityOps/deploy/unraid/restore-drill-postgres.sh
NuklearRabbit acd8b82b09
MobilityOps acceptance / backend (push) Failing after 20s
MobilityOps acceptance / frontend (push) Successful in 26s
MobilityOps acceptance / e2e (push) Skipped
M44: harden release integrity and assurance
2026-08-21 18:32:02 +02:00

45 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
set -eu
backup_file="${1:-}"
[ -f "$backup_file" ] || { echo "Restore-drill backup not found: $backup_file" >&2; exit 1; }
timestamp="$(date -u +%Y%m%d%H%M%S)"
drill_database="mobilityops_restore_drill_$timestamp"
source_database="${POSTGRES_DB:-mobilityops}"
database_host="${POSTGRES_HOST:-db}"
cleanup() {
dropdb --if-exists --force --host="$database_host" --username="$POSTGRES_USER" \
"$drill_database" > /dev/null 2>&1 || true
}
trap cleanup EXIT INT TERM
source_revision="$(psql --host="$database_host" --username="$POSTGRES_USER" \
--dbname="$source_database" --tuples-only --no-align \
--command='SELECT version_num FROM alembic_version')"
[ -n "$source_revision" ] || { echo "Source Alembic revision is unavailable" >&2; exit 1; }
createdb --host="$database_host" --username="$POSTGRES_USER" "$drill_database"
pg_restore --no-owner --no-acl --host="$database_host" --username="$POSTGRES_USER" \
--dbname="$drill_database" "$backup_file"
restored_revision="$(psql --host="$database_host" --username="$POSTGRES_USER" \
--dbname="$drill_database" --tuples-only --no-align \
--command='SELECT version_num FROM alembic_version')"
[ "$restored_revision" = "$source_revision" ] || {
echo "Restored Alembic revision does not match production" >&2
exit 1
}
counts="$(psql --host="$database_host" --username="$POSTGRES_USER" \
--dbname="$drill_database" --tuples-only --no-align --field-separator=, \
--command='SELECT (SELECT count(*) FROM users), (SELECT count(*) FROM vehicles), (SELECT count(*) FROM bookings), (SELECT count(*) FROM audit_events)')"
case "$counts" in
0,*|*,0,*|*,*,0,*|*,*,*,0) echo "Restored database is missing canonical records: $counts" >&2; exit 1 ;;
esac
cleanup
trap - EXIT INT TERM
echo "Restore drill passed: revision=$restored_revision counts=$counts"