sql >> データベース >  >> RDS >> PostgreSQL

Node.jsでのPostgreSQLの複数行の更新

    以下の例は、ライブラリ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を使用した複数行の挿入。



    1. PostgreSQL INSERT ON CONFLICT UPDATE(upsert)は、除外されたすべての値を使用します

    2. CTEから挿入

    3. 新鮮な+経験豊富な人のための一般的なMySqlインタビューの質問と回答

    4. MariaDB DATABASE()の説明