#!/usr/bin/env bash set -euo pipefail backup_path="${1:-}" if [[ -z "$backup_path" ]] || [[ ! -f "$backup_path" ]]; then echo "Utilização: $0 " >&2 exit 1 fi database_user="$(docker compose exec -T postgres printenv POSTGRES_USER)" restore_database="reserva_restore_$(date -u +%Y%m%d%H%M%S)_$$" if [[ ! "$database_user" =~ ^[A-Za-z0-9_]+$ ]] || [[ ! "$restore_database" =~ ^reserva_restore_[0-9_]+$ ]]; then echo "Identificador de restauro inválido." >&2 exit 1 fi cleanup() { docker compose exec -T postgres dropdb \ --username="$database_user" \ --if-exists \ "$restore_database" > /dev/null } trap cleanup EXIT docker compose exec -T postgres createdb \ --username="$database_user" \ "$restore_database" docker compose exec -T postgres pg_restore \ --username="$database_user" \ --dbname="$restore_database" \ --no-owner \ --no-privileges < "$backup_path" migration_count="$(docker compose exec -T postgres psql \ --username="$database_user" \ --dbname="$restore_database" \ --tuples-only \ --no-align \ --command='select count(*) from migrations')" if [[ ! "$migration_count" =~ ^[1-9][0-9]*$ ]]; then echo "O restauro não contém o histórico de migrations esperado." >&2 exit 1 fi echo "Restauro validado em base temporária (${migration_count} migrations)."