103 lines
3.3 KiB
TypeScript
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();
|