Closed
Description
When we execute a lengthy operation inside a transaction, and the connection is suddenly lost during that time, then any query we execute on the client
after that become stuck, i.e. they report nether success no error:
'use strict';
const Pool = require('pg-pool');
const cn = {
database: 'newone',
port: 5433,
user: 'postgres'
};
const p = new Pool(cn);
p.on('error', error => {
// do nothing
});
p.connect((err, client, release) => {
if (err) {
console.log('Failed to connect:', err);
return;
}
const test = async function () {
try {
await client.query('BEGIN');
await client.query('SELECT pg_sleep(10)'); // connection breaks during this one
await client.query('COMMIT');
console.log('success!');
} catch (e) {
console.log('about to rollback...'); // this is reported
await client.query('ROLLBACK'); // this one is stuck, never reporting an error, if the error was due to lost connection
console.log('rollback finished'); // this is never reported, if we are here because of lost connection
} finally {
release();
p.end();
}
};
test();
});
I've tried both pg-pool
directly and via node-postgres
, versions 6.x and 7.x - all the same.
Expected Behavior
Executing any query against client
at that point should immediately report an error that informs us of the lost connectivity.