Files
MobilityOps/deploy/unraid/restore-postgres.sh
T
NuklearRabbit 5d7a5e7359
MobilityOps acceptance / backend (push) Canceled after 0s
MobilityOps acceptance / frontend (push) Canceled after 0s
M19: harden performance and recovery
2026-08-10 12:51:41 +02:00

38 lines
1.3 KiB
Bash
Executable File

#!/bin/sh
set -eu
cd "$(dirname "$0")/../.."
backup_file="${1:-}"
confirmation="${2:-}"
project="${COMPOSE_PROJECT_NAME:-mobilityops}"
compose_files="-f compose.yaml -f compose.unraid.yaml"
if [ ! -f "$backup_file" ]; then
echo "Backup file not found: $backup_file" >&2
exit 1
fi
if [ "$confirmation" != "RESTORE-MOBILITYOPS" ]; then
echo "Refusing destructive restore; pass RESTORE-MOBILITYOPS as the second argument" >&2
exit 1
fi
docker compose -p "$project" $compose_files exec -T db pg_restore --list \
< "$backup_file" > /dev/null
safety_backup="$(./deploy/unraid/backup-postgres.sh)"
echo "Pre-restore safety backup: $safety_backup"
restart_api() {
docker compose -p "$project" $compose_files up -d api web > /dev/null
}
trap restart_api EXIT INT TERM
docker compose -p "$project" $compose_files stop api > /dev/null
docker compose -p "$project" $compose_files exec -T db sh -eu -c \
'dropdb --force -U "$POSTGRES_USER" "$POSTGRES_DB" && createdb -U "$POSTGRES_USER" "$POSTGRES_DB"'
docker compose -p "$project" $compose_files exec -T db sh -eu -c \
'pg_restore --no-owner --no-acl -U "$POSTGRES_USER" -d "$POSTGRES_DB"' \
< "$backup_file"
restart_api
trap - EXIT INT TERM
docker compose -p "$project" $compose_files exec -T api alembic current
echo "Restore completed from $backup_file"