node.js PostgreSQLにトランザクションを持たせてクエリを実行する

node.js PostgreSQLにトランザクションを持たせてクエリを実行する

node.jsのライブラリ「pg」でPostgreSQLにトランザクションを持たせてクエリを実行するサンプルコードを記述してます。nodeのバージョンは14.15.1となります。

環境

  • OS  Ubuntu 20.10
  • node V14.15.1
  • npm 6.14.9
  • PostgreSQL 13.1

pgインストール

pgを使用して、接続するので、npmでインストールしておきます。

npm i pg

トランザクション実行

事前に「sample」データベースの「numbers」テーブルを作成しておきます。

create table numbers (
  id integer NOT NULL, 
  name varchar(10),
  PRIMARY KEY (id)
);

以下は、「BEGIN ~ COMMIT」でトランザクションを作成してクエリを実行するサンプルコードとなります。

const { Client } = require('pg')

const pg = new Client({
    user: 'mebee',
    host: '0.0.0.0',
    database: 'sample',
    password: 'password',
    port: 5432,
})

const sample = async () => {
    try {
        await pg.connect()
        console.log('接続完了')

        await pg.query("BEGIN")

        await pg.query("insert into numbers values ($1, $2)", [1, 'mebee1'])
        await pg.query("insert into numbers values ($1, $2)", [2, 'mebee2'])
        await pg.query("insert into numbers values ($1, $2)", [3, 'mebee3'])
        await pg.query("insert into numbers values ($1, $2)", [4, 'mebee4'])
        await pg.query("insert into numbers values ($1, $2)", [5, 'mebee5'])

        await pg.query("COMMIT")

        const results = await pg.query("select * from numbers")
        console.table(results.rows)
    }
    catch (e) {
        console.log(e)
    }
    finally {
        await pg.end()
        console.log('終了')
    }
}

sample()

実行結果

接続完了
┌─────────┬────┬──────────┐
│ (index) │ id │   name   │
├─────────┼────┼──────────┤
│    0    │ 1  │ 'mebee1' │
│    1    │ 2  │ 'mebee2' │
│    2    │ 3  │ 'mebee3' │
│    3    │ 4  │ 'mebee4' │
│    4    │ 5  │ 'mebee5' │
└─────────┴────┴──────────┘
終了