database/scripts/test-connection.ts
2025-12-27 16:21:09 +08:00

58 lines
1.6 KiB
TypeScript

import fs from 'fs';
import path from 'path';
import { createPostgresMcp, EnvironmentConfig } from '../src/core/index.js';
interface ConfigFile {
environments: EnvironmentConfig[];
}
const usage = () => {
console.error(
'Usage: npx ts-node scripts/test-connection.ts <configPath> <envName> [schema] [tableName]',
);
console.error(
'Example: npx ts-node scripts/test-connection.ts config/postgres.local.json shcis_drworks_cpoe_pg dbo appsettings',
);
};
const main = async (): Promise<void> => {
const [, , configPathArg, envName, schema, tableName] = process.argv;
if (!configPathArg || !envName) {
usage();
process.exit(1);
}
const configPath = path.resolve(process.cwd(), configPathArg);
const raw = fs.readFileSync(configPath, 'utf8');
const parsed = JSON.parse(raw) as ConfigFile;
const envs = parsed.environments ?? [];
const pg = createPostgresMcp(envs);
try {
console.log(`Connecting to env "${envName}" using ${configPath} ...`);
const searchPath = await pg.metadata.describeSearchPath(envName, schema);
console.log('Current search_path:', searchPath);
// Replace with an existing table in your schema to validate data access
const testTable = tableName ?? 'pg_tables';
const result = await pg.queries.execute(
envName,
`SELECT * FROM ${testTable} LIMIT 5`,
[],
schema ? { schema } : undefined,
);
console.log(`Query ok, ${result.rowCount} rows:`);
console.log(result.rows);
} finally {
await pg.connections.closeAll();
}
};
main().catch((error) => {
console.error('Test failed:', error.message);
process.exit(1);
});