#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" ENV_FILE="$PROJECT_ROOT/.env" MIGRATION_FILE="$PROJECT_ROOT/migrations/migrations_v1.sql" # Carrega as variáveis de ambiente do arquivo .env se ele existir if [[ -f "$ENV_FILE" ]]; then set -a # shellcheck disable=SC1090 source "$ENV_FILE" set +a fi # Fallbacks caso não estejam definidas no .env DB_HOST="${DB_HOST:-127.0.0.1}" DB_PORT="${DB_PORT:-5432}" DB_NAME="${DB_NAME:-}" DB_USER="${DB_USER:-}" DB_PASSWORD="${DB_PASSWORD:-${DB_PASS:-}}" # Validações básicas if [[ -z "$DB_NAME" ]]; then echo "Erro: DB_NAME não está configurado no .env." exit 1 fi if [[ -z "$DB_USER" ]]; then echo "Erro: DB_USER não está configurado no .env." exit 1 fi # Exporta a senha temporariamente para o psql não pedir interativamente export PGPASSWORD="$DB_PASSWORD" echo "Conectando ao PostgreSQL para recriar o banco '$DB_NAME'..." # Conecta ao banco padrão 'postgres' para conseguir derrubar e recriar o seu banco psql "host=$DB_HOST port=$DB_PORT user=$DB_USER dbname=postgres" -v ON_ERROR_STOP=1 < pg_backend_pid(); DROP DATABASE IF EXISTS "$DB_NAME"; CREATE DATABASE "$DB_NAME" OWNER "$DB_USER"; SQL echo "Aplicando as migrações do arquivo: $(basename "$MIGRATION_FILE")..." # Conecta diretamente no banco novo e roda o arquivo de SQL psql "host=$DB_HOST port=$DB_PORT user=$DB_USER dbname=$DB_NAME" -v ON_ERROR_STOP=1 -f "$MIGRATION_FILE" echo "--------------------------------------------------------" echo "Banco de dados '$DB_NAME' recriado com sucesso e migration aplicada!" echo "--------------------------------------------------------"