mirror of
https://github.com/brianc/node-postgres.git
synced 2026-01-18 15:55:05 +00:00
* Correctly capitalize GitHub * Add note on callbacks to index * Add note on error handling * Update client examples to use promises * Update pooling examples * Fix readme link * Update cursor docs * Update connecting examples * Update Queries * Update examples in pooling * Update trx examples * Update SSL example * Update example * Use ESM instead of CJS * Update docs/pages/apis/cursor.mdx Co-authored-by: Charmander <~@charmander.me> * Update docs/pages/apis/cursor.mdx Co-authored-by: Charmander <~@charmander.me> * Update docs/pages/apis/pool.mdx Co-authored-by: Charmander <~@charmander.me> * Update docs/pages/apis/pool.mdx Co-authored-by: Charmander <~@charmander.me> * Update docs/pages/apis/pool.mdx Co-authored-by: Charmander <~@charmander.me> * Update docs/pages/features/connecting.mdx Co-authored-by: Charmander <~@charmander.me> * Update docs/pages/features/connecting.mdx Co-authored-by: Charmander <~@charmander.me> * Update docs/pages/features/ssl.mdx Co-authored-by: Charmander <~@charmander.me> --------- Co-authored-by: Charmander <~@charmander.me>
39 lines
1.3 KiB
Plaintext
39 lines
1.3 KiB
Plaintext
---
|
|
title: Transactions
|
|
---
|
|
|
|
import { Alert } from '/components/alert.tsx'
|
|
|
|
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.
|
|
|
|
<Alert>
|
|
You <strong>must</strong> use the <em>same</em> 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{' '}
|
|
<span className="code">pool.query</span> method you <strong>will</strong> have problems. Do not use transactions with
|
|
the <span className="code">pool.query</span> method.
|
|
</Alert>
|
|
|
|
## Examples
|
|
|
|
```js
|
|
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()
|
|
}
|
|
``` |