diff --git a/server/db/pg/driver.ts b/server/db/pg/driver.ts index 44b210b0..23904c7e 100644 --- a/server/db/pg/driver.ts +++ b/server/db/pg/driver.ts @@ -35,11 +35,12 @@ function createDb() { } // Create connection pools instead of individual connections + const poolConfig = config.postgres.pool; const primaryPool = new Pool({ connectionString, - max: 20, - idleTimeoutMillis: 30000, - connectionTimeoutMillis: 5000, + max: poolConfig.max_connections, + idleTimeoutMillis: poolConfig.idle_timeout_ms, + connectionTimeoutMillis: poolConfig.connection_timeout_ms, }); const replicas = []; @@ -50,9 +51,9 @@ function createDb() { for (const conn of replicaConnections) { const replicaPool = new Pool({ connectionString: conn.connection_string, - max: 10, - idleTimeoutMillis: 30000, - connectionTimeoutMillis: 5000, + max: poolConfig.max_replica_connections, + idleTimeoutMillis: poolConfig.idle_timeout_ms, + connectionTimeoutMillis: poolConfig.connection_timeout_ms, }); replicas.push(DrizzlePostgres(replicaPool)); } diff --git a/server/lib/readConfigFile.ts b/server/lib/readConfigFile.ts index af6cd642..ea872252 100644 --- a/server/lib/readConfigFile.ts +++ b/server/lib/readConfigFile.ts @@ -158,7 +158,21 @@ export const configSchema = z connection_string: z.string() }) ) + .optional(), + pool: z + .object({ + max_connections: z.number().positive().optional().default(20), + max_replica_connections: z.number().positive().optional().default(10), + idle_timeout_ms: z.number().positive().optional().default(30000), + connection_timeout_ms: z.number().positive().optional().default(5000) + }) .optional() + .default({ + max_connections: 20, + max_replica_connections: 10, + idle_timeout_ms: 30000, + connection_timeout_ms: 5000 + }) }) .optional(), traefik: z