Skip to content

Instantly share code, notes, and snippets.

@Znarkus
Last active October 3, 2016 07:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Znarkus/5b5b4ff4b31ca2eb1b3d77b47df9dbb7 to your computer and use it in GitHub Desktop.
Save Znarkus/5b5b4ff4b31ca2eb1b3d77b47df9dbb7 to your computer and use it in GitHub Desktop.
Transaction test Postgres
$ DB_POOL_MIN=1 DB_POOL_MAX=1 node -r dotenv/config -r babel-register -r babel-polyfill scripts/dev/trx-test.js
knex:tx trx1: Starting top level transaction +0ms
knex:tx trx2: Starting top level transaction +13ms
bolt:knex:query { bindings: undefined, sql: 'BEGIN;' } +61ms
bolt:knex:query { bindings: [], sql: 'select * from testt' } +16ms
bolt:knex:query { bindings: [ 1 ], sql: 'update testt set counter = counter + 1 where id = ?' } +4ms
AFTER UPDATE id 1
AFTER 5s DELAY id 1
bolt:knex:query { bindings: undefined, sql: 'COMMIT;' } +5s
knex:tx trx1: releasing connection +2ms
bolt:knex:query { bindings: undefined, sql: 'BEGIN;' } +1ms
bolt:knex:query { bindings: [], sql: 'select * from testt' } +2ms
bolt:knex:query { bindings: [ 2 ], sql: 'update testt set counter = counter + 1 where id = ?' } +2ms
AFTER UPDATE id 2
AFTER 5s DELAY id 2
bolt:knex:query { bindings: undefined, sql: 'COMMIT;' } +5s
knex:tx trx2: releasing connection +1ms
FINISHED
^C
$ DB_POOL_MIN=1 DB_POOL_MAX=2 node -r dotenv/config -r babel-register -r babel-polyfill scripts/dev/trx-test.js
knex:tx trx1: Starting top level transaction +0ms
knex:tx trx2: Starting top level transaction +6ms
bolt:knex:query { bindings: undefined, sql: 'BEGIN;' } +60ms
bolt:knex:query { bindings: undefined, sql: 'BEGIN;' } +16ms
bolt:knex:query { bindings: [], sql: 'select * from testt' } +2ms
bolt:knex:query { bindings: [], sql: 'select * from testt' } +2ms
bolt:knex:query { bindings: [ 1 ], sql: 'update testt set counter = counter + 1 where id = ?' } +4ms
bolt:knex:query { bindings: [ 2 ], sql: 'update testt set counter = counter + 1 where id = ?' } +3ms
AFTER UPDATE id 1
AFTER UPDATE id 2
AFTER 5s DELAY id 1
AFTER 5s DELAY id 2
bolt:knex:query { bindings: undefined, sql: 'COMMIT;' } +5s
bolt:knex:query { bindings: undefined, sql: 'COMMIT;' } +0ms
knex:tx trx1: releasing connection +2ms
knex:tx trx2: releasing connection +1ms
FINISHED
$ DB_POOL_MIN=1 DB_POOL_MAX=2 node -r dotenv/config -r babel-register -r babel-polyfill scripts/dev/trx-test.js
knex:tx trx1: Starting top level transaction +0ms
knex:tx trx2: Starting top level transaction +6ms
bolt:knex:query { bindings: undefined, sql: 'BEGIN;' } +61ms
bolt:knex:query { bindings: undefined, sql: 'BEGIN;' } +16ms
bolt:knex:query { bindings: [], sql: 'select * from testt' } +2ms
bolt:knex:query { bindings: [], sql: 'select * from testt' } +2ms
bolt:knex:query { bindings: [ 1 ], sql: 'update testt set counter = counter + 1 where id = ?' } +3ms
bolt:knex:query { bindings: [ 1 ], sql: 'update testt set counter = counter + 1 where id = ?' } +4ms
AFTER UPDATE id 1
AFTER 5s DELAY id 1
bolt:knex:query { bindings: undefined, sql: 'COMMIT;' } +5s
knex:tx trx1: releasing connection +2ms
AFTER UPDATE id 1
AFTER 5s DELAY id 1
bolt:knex:query { bindings: undefined, sql: 'COMMIT;' } +5s
knex:tx trx2: releasing connection +2ms
FINISHED
$ DB_POOL_MIN=1 DB_POOL_MAX=1 node -r dotenv/config -r babel-register -r babel-polyfill scripts/dev/trx-test.js
knex:tx trx1: Starting top level transaction +0ms
knex:tx trx2: Starting top level transaction +11ms
bolt:knex:query { bindings: undefined, sql: 'BEGIN;' } +70ms
bolt:knex:query { bindings: [], sql: 'select * from testt' } +17ms
bolt:knex:query { bindings: [ 1 ], sql: 'update testt set counter = counter + 1 where id = ?' } +5ms
AFTER UPDATE id 1
AFTER 5s DELAY id 1
bolt:knex:query { bindings: undefined, sql: 'COMMIT;' } +5s
knex:tx trx1: releasing connection +2ms
bolt:knex:query { bindings: undefined, sql: 'BEGIN;' } +1ms
bolt:knex:query { bindings: [], sql: 'select * from testt' } +2ms
bolt:knex:query { bindings: [ 1 ], sql: 'update testt set counter = counter + 1 where id = ?' } +2ms
AFTER UPDATE id 1
AFTER 5s DELAY id 1
bolt:knex:query { bindings: undefined, sql: 'COMMIT;' } +5s
knex:tx trx2: releasing connection +1ms
FINISHED
'use strict'
require('../../src/env')
const knex = require('../../src/knex')
const Promise = require('bluebird')
Promise.all([
test(1),
test(1),
]).then(() => {
console.log('FINISHED')
return knex.destroy()
})
async function test (id) {
await knex.transaction(async trx => {
await trx.raw('select * from testt')
await trx.raw('update testt set counter = counter + 1 where id = ?', id)
console.log(`AFTER UPDATE id ${id}`)
await Promise.delay(5000)
console.log(`AFTER 5s DELAY id ${id}`)
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment