以下の例は、ライブラリpg-promiseとそのメソッドhelpers.updateに基づいています:
// library initialization, usually placed in its own module:
const pgp = require('pg-promise')({
capSQL: true // capitalize all generated SQL
});
const db = pgp(/*your connection details*/);
// records to be updated:
const updateData = [
{id: 1, value: 1234},
{id: 2, value: 5678},
{id: 3, value: 91011}
];
// declare your ColumnSet once, and then reuse it:
const cs = new pgp.helpers.ColumnSet(['?id', 'value'], {table: 'fit_ratios'});
// generating the update query where it is needed:
const update = pgp.helpers.update(updateData, cs) + ' WHERE v.id = t.id';
//=> UPDATE "fit_ratios" AS t SET "value"=v."value"
// FROM (VALUES(1,1234),(2,5678),(3,91011))
// AS v("id","value") WHERE v.id = t.id
// executing the query:
await db.none(update);
複数行の更新を生成するこの方法は、次のように特徴付けることができます。
- クエリ生成にスマートキャッシングを実装するColumnSetタイプに依存しているため、非常に高速です
- すべてのデータ型がライブラリのクエリフォーマットエンジンを通過して、すべてが正しくフォーマットされ、エスケープされていることを確認するため、完全に安全です。
- 列定義でサポートされている高度なColumnConfig構文により、非常に柔軟です。
- pg-promiseによって実装された簡素化されたインターフェイスにより、非常に使いやすいです。
?
を使用していることに注意してください 列id
の前 列が条件の一部であるが、更新されないことを示します。完全な列構文については、クラスColumnおよびColumnConfig構造を参照してください。
関連する質問:pg-promiseを使用した複数行の挿入。