setup 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  4. PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
  5. ENV_FILE="$PROJECT_ROOT/.env"
  6. MIGRATION_FILE="$PROJECT_ROOT/migrations/migrations_v1.sql"
  7. # Carrega as variáveis de ambiente do arquivo .env se ele existir
  8. if [[ -f "$ENV_FILE" ]]; then
  9. set -a
  10. # shellcheck disable=SC1090
  11. source "$ENV_FILE"
  12. set +a
  13. fi
  14. # Fallbacks caso não estejam definidas no .env
  15. DB_HOST="${DB_HOST:-127.0.0.1}"
  16. DB_PORT="${DB_PORT:-5432}"
  17. DB_NAME="${DB_NAME:-}"
  18. DB_USER="${DB_USER:-}"
  19. DB_PASSWORD="${DB_PASSWORD:-${DB_PASS:-}}"
  20. # Validações básicas
  21. if [[ -z "$DB_NAME" ]]; then
  22. echo "Erro: DB_NAME não está configurado no .env."
  23. exit 1
  24. fi
  25. if [[ -z "$DB_USER" ]]; then
  26. echo "Erro: DB_USER não está configurado no .env."
  27. exit 1
  28. fi
  29. # Exporta a senha temporariamente para o psql não pedir interativamente
  30. export PGPASSWORD="$DB_PASSWORD"
  31. echo "Conectando ao PostgreSQL para recriar o banco '$DB_NAME'..."
  32. # Conecta ao banco padrão 'postgres' para conseguir derrubar e recriar o seu banco
  33. psql "host=$DB_HOST port=$DB_PORT user=$DB_USER dbname=postgres" -v ON_ERROR_STOP=1 <<SQL
  34. -- Derruba conexões ativas para evitar o erro de "database is being accessed by other users"
  35. SELECT pg_terminate_backend(pid)
  36. FROM pg_stat_activity
  37. WHERE datname = '$DB_NAME'
  38. AND pid <> pg_backend_pid();
  39. DROP DATABASE IF EXISTS "$DB_NAME";
  40. CREATE DATABASE "$DB_NAME" OWNER "$DB_USER";
  41. SQL
  42. echo "Aplicando as migrações do arquivo: $(basename "$MIGRATION_FILE")..."
  43. # Conecta diretamente no banco novo e roda o arquivo de SQL
  44. psql "host=$DB_HOST port=$DB_PORT user=$DB_USER dbname=$DB_NAME" -v ON_ERROR_STOP=1 -f "$MIGRATION_FILE"
  45. echo "--------------------------------------------------------"
  46. echo "Banco de dados '$DB_NAME' recriado com sucesso e migration aplicada!"
  47. echo "--------------------------------------------------------"