pg-transaction

simplify executing transactions with node-postgres

Make it easier to write transactions for PostgreSQL using node-postgres.

The callback and event emitter styles both work.
Note: if you use a callback, then the error event won't be emitted. This is consistent with node-postgres.

##Installation:

To install the most recent release from npm, run:

npm install pg-transaction
begin([mode], [callback]);
query(); // This is pg.Client.query from node-postgres. There are various possible arguments look at its documentation 
savepoint(savepoint, [callback]);
release(savepoint, [callback]);
rollback([savepoint], [callback]);
commit([callback]);
abort([callback]);
  • error
 
/**
 * Module dependencies
 */
 
var
  // PostgreSQL modules 
  pg = require('pg')
, Transaction = require('pg-transaction')
 
  // Configuration stuff 
, connectionString = process.env['PG_CON'] || ''
;
 
var die = function(err){
  if (err) throw err;
};
 
var client = new pg.Client(connectionString);
client.connect();
 
client.query("CREATE TEMP TABLE beatles(name varchar(10), height integer, birthday timestamptz)");
 
var tx = new Transaction(client);
tx.on('error', die);
 
tx.begin();
tx.query("INSERT INTO beatles(name, height, birthday) values($1, $2, $3)", ['Ringo', 67, new Date(1945, 11, 2)]);
tx.savepoint('savepoint1');
tx.query("INSERT INTO beatles(name, height, birthday) values($1, $2, $3)", ['John', 68, new Date(1944, 10, 13)]);
tx.rollback('savepoint1'); // all statements after savepoint1 are undone (John will not be inserted) 
tx.release('savepoint1'); // can no longer use savepoint1 as a point to rollback to 
tx.commit();
 
client.query("SELECT COUNT(*) AS count FROM beatles", function(errresult){
  if (err) return die(err);
  console.log(result.rows[0].count); // 1 
  client.end();
});