Files

47 lines
1.7 KiB
JavaScript
Raw Permalink Normal View History

// PostgreSQL Connection Pool
// All route files import this module instead of receiving a sqlite3 `db` parameter.
// Configured via DATABASE_URL environment variable.
// Ensure dotenv is loaded before accessing env vars
require('dotenv').config({ path: require('path').join(__dirname, '.env') });
const { Pool } = require('pg');
if (!process.env.DATABASE_URL) {
console.error('[DB] FATAL: DATABASE_URL environment variable is not set.');
console.error('[DB] Expected format: postgresql://user:password@host:port/database');
process.exit(1);
}
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
max: 10, // Maximum connections in pool
idleTimeoutMillis: 30000, // Close idle connections after 30s
connectionTimeoutMillis: 5000, // Fail if connection takes >5s
});
// Log unexpected pool errors (connection drops, etc.)
pool.on('error', (err) => {
console.error('[DB Pool] Unexpected error on idle client:', err.message);
});
// Track active connections and warn when approaching exhaustion
let _activeCount = 0;
pool.on('acquire', () => {
_activeCount++;
if (_activeCount >= 8) {
console.warn(`[DB Pool] WARNING: ${_activeCount}/10 connections active — approaching exhaustion`);
}
});
pool.on('release', () => { _activeCount--; });
// Health check — verify connection on startup
pool.query('SELECT NOW()')
.then(() => console.log('[DB Pool] Connected to PostgreSQL'))
.catch((err) => {
console.error('[DB Pool] Failed to connect:', err.message);
console.error('[DB Pool] Check DATABASE_URL and ensure Postgres is running on port 5433');
});
module.exports = pool;