| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #!/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 <<SQL
- -- Derruba conexões ativas para evitar o erro de "database is being accessed by other users"
- SELECT pg_terminate_backend(pid)
- FROM pg_stat_activity
- WHERE datname = '$DB_NAME'
- AND pid <> 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 "--------------------------------------------------------"
|