/** * Script de teste de conexão com PostgreSQL * Executa um health check e tenta uma query simples */ import { resolve } from "node:path"; // Carregar variáveis de ambiente import { config } from "dotenv"; // Tentar carregar .env.local primeiro, depois .env config({ path: resolve(process.cwd(), ".env.local") }); config({ path: resolve(process.cwd(), ".env") }); import { closePool, healthCheck, query } from "./index"; async function testConnection() { console.log("🔍 Testando conexão com PostgreSQL...\n"); // Verificar variável de ambiente if (!process.env.PG_DB) { console.error("❌ PG_DB não está definido nas variáveis de ambiente"); console.log("\n💡 Configure a variável PG_DB:"); console.log(" export PG_DB=postgresql://user:pass@host:port/db"); console.log(" ou crie um arquivo .env.local com:"); console.log(" PG_DB=postgresql://user:pass@host:port/db\n"); process.exit(1); } console.log("✅ Variável PG_DB encontrada"); console.log( ` Host: ${process.env.PG_DB.split("@")[1]?.split("/")[0] || "não detectado"}\n`, ); try { // Health check console.log("📡 Executando health check..."); const isHealthy = await healthCheck(); if (!isHealthy) { console.error("❌ Health check falhou - banco não está acessível"); process.exit(1); } console.log("✅ Health check passou\n"); // Query de teste console.log("📊 Executando query de teste..."); const result = await query("SELECT version(), NOW() as current_time"); console.log("✅ Query executada com sucesso"); console.log( ` PostgreSQL Version: ${result.rows[0]?.version?.split(" ")[0] || "N/A"}`, ); console.log(` Current Time: ${result.rows[0]?.current_time || "N/A"}\n`); // Verificar se as tabelas existem console.log("🔍 Verificando tabelas..."); const tablesResult = await query(` SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name IN ('users', 'user_characters') ORDER BY table_name `); const tables = tablesResult.rows.map((row: any) => row.table_name); if (tables.length === 0) { console.log("⚠️ Tabelas não encontradas. Execute as migrations:"); console.log(" pnpm db:migrate\n"); } else { console.log(`✅ Tabelas encontradas: ${tables.join(", ")}\n`); } console.log("🎉 Conexão com PostgreSQL está funcionando corretamente!"); // Fechar pool await closePool(); process.exit(0); } catch (error) { console.error("❌ Erro ao conectar com PostgreSQL:"); console.error(error instanceof Error ? error.message : String(error)); if (error instanceof Error && error.message.includes("timeout")) { console.log("\n💡 Verifique:"); console.log(" - O servidor PostgreSQL está acessível?"); console.log(" - A URL de conexão está correta?"); console.log(" - O firewall permite conexões?"); } if (error instanceof Error && error.message.includes("authentication")) { console.log("\n💡 Verifique:"); console.log(" - Usuário e senha estão corretos?"); console.log(" - O usuário tem permissão para acessar o banco?"); } await closePool(); process.exit(1); } } testConnection();