Skip to content

Instantly share code, notes, and snippets.

@chowey
Created March 28, 2012 13:17
Show Gist options
  • Save chowey/2226114 to your computer and use it in GitHub Desktop.
Save chowey/2226114 to your computer and use it in GitHub Desktop.
pg atomic transaction test
var pg = require('pg');
var client = new pg.Client('pg://user:pass@127.0.0.1/postgres');
client.connect(function () {
client.query('CREATE TEMP TABLE foo (bar real)', function () {
for (var i = 0; i < 5; i++)
insertRandomNumber();
});
client.once('drain', function () {
client.query('SELECT bar FROM foo', function (err, results) {
for (var i = 0; i < results.rowCount; i++)
console.log(results.rows[i].bar);
});
client.once('drain', client.end.bind(client));
});
});
function insertRandomNumber() {
console.log('BEGIN');
client.query('BEGIN', function () {
console.log('INSERT');
client.query('INSERT INTO foo VALUES (random()) RETURNING bar', function (err, result) {
if (result.rows[0].bar < 0.5)
console.log('COMMIT'), client.query('COMMIT');
else
console.log('ROLLBACK'), client.query('ROLLBACK');
});
});
}
@chowey
Copy link
Author

chowey commented Mar 28, 2012

Results in:

c:\node>node transact
BEGIN
BEGIN
BEGIN
BEGIN
BEGIN
INSERT
INSERT
INSERT
INSERT
INSERT
COMMIT
ROLLBACK
COMMIT
COMMIT
ROLLBACK
0.0732571
0.614192
0.43519
0.0143881
0.878153

c:\node>node transact
BEGIN
BEGIN
BEGIN
BEGIN
BEGIN
INSERT
INSERT
INSERT
INSERT
INSERT
ROLLBACK
COMMIT
COMMIT
ROLLBACK
ROLLBACK

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment