'use strict'; const config = require('config'); const knex = require('knex'); const knexInstance = knex({ client: 'pg', connection: config.database.owner, pool: config.database.pool, // performance overhead, don't use asyncStackTraces in production asyncStackTraces: process.env.NODE_ENV === 'development', // debug: process.env.NODE_ENV === 'development', }); knexInstance.on('query', function onQuery(query) { const bindingCount = query.bindings?.length ?? 0; if (bindingCount > 50000) { const error = new Error(`[knex] Dangerous query: ${bindingCount} bindings detected: ${query.sql?.slice(0, 200)}${query.sql?.length > 200 ? '...' : ''}`); Error.captureStackTrace(error, onQuery); // console.error(error); throw error; // optionally hard-fail so you get a real stack trace } }); knexInstance.on('query-error', (error, query) => { error.knexSql = `${query.sql?.slice(0, 200)}${query.sql?.length > 200 ? '...' : ''}`; error.knexBindingCount = query.bindings?.length; }); module.exports = knexInstance;