Transaction

as simple as:

    let pgdb_nt; //no   transaction (using the pool)
    let pgdb_wt; //with transaction

    pgdb_nt = await PgDb.connect(..);
    pgdb_wt = await pgdb_nt.transactionBegin();
    try {
        //look busy

        await pgdb_nt.query(..) //executed outside of the transaction
        await pgdb_wt.query(..) //executed inside of the transaction

        await pgdb_wt.transactionCommit();
    } catch(e) {
        await pgdb_wt.transactionRollback();
    }

active transaction can be tested with

    if (pgdb.isTransactionActive()) {
        //...
    }

Savepoint transaction like a subtransaction

    //connection with transaction
    let pgdb_wt = await pgdb.transactionBegin();
    // ... do some work
    pgdb_wt = await pgdb.savePoint('import');
    try {
        //... do import
        await pgdb_wt.transactionCommit();
    } catch(e) {
        // rollback to "import" savepoint
        await pgdb_wt.transactionRollback({savepoint:'import'}); 
    }
    // transaction continue from "import" savepoint

See Postgresql documentation

Dedicated connection

PgDb use connection pool, so it run every query in a random connection from the pool. Connection pool size can be set at connection time with "poolSize" attribute, see connection. Sometimes single connection mode is desired (ex: execute an SQL file), or if you want to use variables, or set the search_path. It is posibble and its usage very similar to transactions. dedicatedConnectionBegin() will create a new PgDb instance which is now in a dedicated connection mode. All further query will be run in the same connection, no pool is used. Programmer responsible to close dedicated connection with dedicatedConnectionEnd() to avoid leaking. If closed, connection will get back to the pool and pgdb instance will work in pool mode.

pgdb = await PgDb.connect(..);
pgdb_1con = await pgdb.dedicatedConnectionBegin();
try {
    //do magic
    await pgdb_1con.query(..);
    await pgdb_1con.schema.table.find(..);

} finally {
    //lets release it
    await pgdb_1con.dedicatedConnectionEnd();
}