From 455cb3843779edb6425913b2ff3203d15f5fb14b Mon Sep 17 00:00:00 2001 From: Nicolas Ritouet Date: Fri, 6 Feb 2026 05:50:15 +0100 Subject: [PATCH 1/2] fix: add database connection pool configuration Configure postgres.js pool with max connections (20, configurable via DB_POOL_MAX), idle timeout (20s), and connect timeout (10s). Defaults had no idle cleanup which could leak connections under load. Co-Authored-By: Claude Opus 4.6 --- src/db/index.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/db/index.ts b/src/db/index.ts index fe9fa8a..856b4ba 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -12,8 +12,12 @@ if (!process.env.DATABASE_URL) { const connectionString = process.env.DATABASE_URL; -// Create postgres connection -export const sql = postgres(connectionString); +// Create postgres connection with pool configuration +export const sql = postgres(connectionString, { + max: parseInt(process.env.DB_POOL_MAX || "20"), + idle_timeout: 20, + connect_timeout: 10, +}); // Create drizzle instance export const db = drizzle(sql, { schema }); From 6140e4454682e62d615a6f5dac8dcab4201e9d72 Mon Sep 17 00:00:00 2001 From: Nicolas Ritouet Date: Fri, 6 Feb 2026 20:36:57 +0100 Subject: [PATCH 2/2] fix: guard against NaN when parsing DB_POOL_MAX Use Number.isFinite() check to handle empty string, non-numeric, or negative values for DB_POOL_MAX environment variable. Co-Authored-By: Claude Opus 4.6 --- src/db/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/db/index.ts b/src/db/index.ts index 856b4ba..0107b67 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -12,9 +12,11 @@ if (!process.env.DATABASE_URL) { const connectionString = process.env.DATABASE_URL; +const poolMax = parseInt(process.env.DB_POOL_MAX ?? "", 10); + // Create postgres connection with pool configuration export const sql = postgres(connectionString, { - max: parseInt(process.env.DB_POOL_MAX || "20"), + max: Number.isFinite(poolMax) && poolMax > 0 ? poolMax : 20, idle_timeout: 20, connect_timeout: 10, });