node-postgres icon indicating copy to clipboard operation
node-postgres copied to clipboard

ConnectionTimeoutMillis is not respected and pool.connect hangs indefinitely

Open mikewang333 opened this issue 1 year ago • 3 comments

Hi, I work on a product that allows users to connect to their own postgres instance and write queries.

I noticed for hostnames related to incorta, if the configuration isn't set up properly the connectionTimeoutMillis isn't respected and the event loop is blocked at pool.connect.

Example repro with a sample incorta postgres instance (I'm using a free trial instance so it might expire soon. It's pretty easy to spin up another one though on their site).

const { Pool } = require('pg');

const executeQuery = async () => {
  const pool = new Pool({ host: 'incorta-5668.sqli.cloud13.incorta.com', port: 3482, connectionTimeoutMillis: 1000});
  pool.on('error', (err) => {
    console.error('Unexpected error on idle client', err);
    process.exit(-1);
  });

  // STUCK AT THIS LINE
  const client = await pool.connect();

  client.release();
  await pool.end();
};

executeQuery();

Would be great if this could timeout after the configured connectionTimeoutMillis like it would with other misconfigured postgres instances.

We're using pg version 8.11.3 currently. Thank you! :)

mikewang333 avatar Apr 17 '24 19:04 mikewang333

Hi, we are probably experiencing the same issue with digitalocean URLs like this: postgresql://user:[email protected]:25060/foobar?sslmode=require.

We are not able to reproduce it in our dev environment, but in our production env (running on CloudFlare durable objects), it seems to hang quite consistently on the client.connect() (we're not using pools, btw).

pcan avatar Aug 29 '24 09:08 pcan