error: terminating connection due to administrator command\n at Parser.parseErrorMessage(...)
Version: pg 8.7.1
We are getting a client via a pg.Pool as:
const pool = new pg.Pool({...});
const client = pool.connect();
client.on('error', (err) => {...});
Yet we still get this uncaughtException error at times when the database is restarted:
terminating connection due to administrator command\n at Parser.parseErrorMessage (/projectA/server/node_modules/pg-protocol/dist/parser.js:287:98)\n at Parser.handlePacket (/projectA/server/node_modules/pg-protocol/dist/parser.js:126:29)\n at Parser.parse (/projectA/server/node_modules/pg-protocol/dist/parser.js:39:38)\n at TLSSocket.<anonymous> (/projectA/server/node_modules/pg-protocol/dist/index.js:11:42)\n at TLSSocket.emit (node:events:526:28)\n at addChunk (node:internal/streams/readable:315:12)\n at readableAddChunk (node:internal/streams/readable:289:9)\n at TLSSocket.Readable.push (node:internal/streams/readable:228:10)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23
I searched for other similar issues but could not deduct if they were the same, or if the docs are missing some information here or not.
How is it possible? Our error handler does catch errors such as error: terminating connection due to administrator command and other similar things, but some slip through with the above error.
My only idea would be that we need a pool.on('error', (err) => {...}); i.e. an error handler on the pg.Pool level as well? But we only have one client via pool.connect() so I would have thought it should catch all errors? If not, I think this should be more clear in the docs in the error event both here https://node-postgres.com/api/client#events and here https://node-postgres.com/api/pool#events.
Or is this a bug in node-postgres?
You need to catch errors both on the pool and on the client
const pool = new pg.Pool({...});
const client = pool.connect();
pool.on('error', (err) => {...});
client.on('error', (err) => {...});
@caracal7 thanks for confirming, then I do think this is a docs issue, because this is definitely not clear.