• features
  • Transactions

To execute a transaction with node-postgres you simply execute BEGIN / COMMIT / ROLLBACK queries yourself through a client. Because node-postgres strives to be low level and un-opinionated, it doesn't provide any higher level abstractions specifically around transactions.

⚠️

You must use the same client instance for all statements within a transaction. PostgreSQL isolates a transaction to individual clients. This means if you initialize or use transactions with the pool.query method you will have problems. Do not use transactions with the pool.query method.

Examples

import { Pool } from 'pg' const pool = new Pool()   const client = await pool.connect()   try {  await client.query('BEGIN')  const queryText = 'INSERT INTO users(name) VALUES($1) RETURNING id'  const res = await client.query(queryText, ['brianc'])    const insertPhotoText = 'INSERT INTO photos(user_id, photo_url) VALUES ($1, $2)'  const insertPhotoValues = [res.rows[0].id, 's3.bucket.foo']  await client.query(insertPhotoText, insertPhotoValues)  await client.query('COMMIT') } catch (e) {  await client.query('ROLLBACK')  throw e } finally {  client.release() }