← back to Norma
agents/shared/db.js
45 lines
/**
* Norma Shared Database Connection
*
* PostgreSQL pool for all Norma agents.
* Uses the Norma database on localhost.
*/
const { Pool } = require('pg');
const pool = new Pool({
connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/sdcc',
max: 10,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 5000,
});
// Log pool errors (don't crash the process)
pool.on('error', (err) => {
console.error(`[${new Date().toISOString()}] [db] Unexpected pool error:`, err.message);
});
/**
* Execute a parameterized query against the pool.
* @param {string} text - SQL query with $1, $2, etc. placeholders
* @param {Array} params - Parameter values
* @returns {Promise<import('pg').QueryResult>}
*/
async function query(text, params) {
const start = Date.now();
try {
const result = await pool.query(text, params);
const duration = Date.now() - start;
if (duration > 1000) {
console.warn(`[${new Date().toISOString()}] [db] Slow query (${duration}ms): ${text.substring(0, 80)}...`);
}
return result;
} catch (err) {
console.error(`[${new Date().toISOString()}] [db] Query error: ${err.message}`);
console.error(`[${new Date().toISOString()}] [db] Query: ${text.substring(0, 120)}`);
throw err;
}
}
module.exports = { pool, query };