Open
Description
The docs somewhat talk about it in pieces, but it wasn't 100% clear what a minimal code example with full error handling looks like, so I was hoping to get some clarity around that. I believe the following are both minimal examples, but I have a few questions surrounding them.
Client
example:
import pg from 'pg';
const client = new pg.Client();
await client.connect();
try {
await client.query('SELECT $1::text as message', ['Hello world!']);
} finally {
await client.end();
}
Pool
example:
import pg from 'pg';
const pool = new pg.Pool();
try {
await pool.query('SELECT $1::text as message', ['Hello world!']);
} finally {
await pool.end();
}
My couple questions:
- Does either example need an actual event listener for
error
, or because I'm callingconnect
->query
->end
directly after each other, is it not possible for anerror
event to actually be emitted? I know in normal case errors that happen during those are rejected with the promise, but I wasn't sure if it was actually possible for anerror
event to be emitted between say theconnect
andquery
calls, etc. - Is there any advantage or disadvantage to using
Pool
even if it's only a single call and will then be torn down? The only advantage I can see is it requires one less line of code since you don't need to explicitly callconnect
, but I didn't know if there was other overhead or considered an antipattern*?
* I know instantiating a bunch of pools is an antipattern, but think of a usecase more akin to lambda or something, where it's not possible to keep a pool active, so I'm basically just spinning up some code, running a single query, then spinning everything down. Does using Pool
have any negatives for that use case, or does defaulting to Pool
over Client
make sense?
Thanks for any info/help!