Files
pagodera/lib/db/test-connection.ts
2025-11-11 03:08:36 -03:00

103 lines
3.3 KiB
TypeScript

/**
* 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();