pg-promiseで複数のレコードを挿入する

マンディ:

複数のレコードを挿入する必要があるシナリオがあります。id(他のテーブルからのfk)、key(char)、value(char)などのテーブル構造があります。保存が必要な入力は、上記のデータの配列です。例:次のような配列オブジェクトがあります。

lst = [];

obj = {};
obj.id= 123;
obj.key = 'somekey';
obj.value = '1234';
lst.push(obj);

obj = {};
obj.id= 123;
obj.key = 'somekey1';
obj.value = '12345';
lst.push(obj);

MS SQLでは、TVPを作成して渡しました。私はpostgresでどのように達成するのかわかりません。だから私がしたいのは、pg-promiseライブラリを使用して、リストのすべての項目を単一のクエリでpostgres sqlに保存することです。ドキュメントが見つからない、またはドキュメントから理解できない。助けてくれてありがとう。ありがとう。

vitaly-t:

私はpg-promiseの作者です

複数のレコードを挿入する方法は2つあります。最初の最も一般的な方法は、トランザクションを使用して、すべてのレコードが正しく挿入されているか、どれも挿入されていないことを確認することです。

PG-約束、それは次のように行われます。

db.tx(t => {
    const queries = lst.map(l => {
        return t.none('INSERT INTO table(id, key, value) VALUES(${id}, ${key}, ${value})', l);
    });
    return t.batch(queries);
})
    .then(data => {
        // SUCCESS
        // data = array of null-s
    })
    .catch(error => {
        // ERROR
    });

メソッドtxトランザクションを開始し、すべてのINSERTクエリプロミスを作成して、それらをすべてバッチとして解決します

2番目のアプローチは、すべての挿入値を単一のINSERTクエリに連結することです。これについては、パフォーマンスブーストで詳しく説明します参照:pg-promiseによる複数行挿入

その他の例については、タスクトランザクションを参照してください

添加

ほとんどの場合、レコードを挿入するのidではなく、自動的に生成することに注意してください新しいIDを取得したい場合もあれば、気にしない場合もあります。

APIによるバッチは個々の結果の配列で解決されメソッドnoneはで解決されるnullため、上記の例は-s の配列で解決されます。null

新しいid-sを生成し、それらをすべて取得したいとします。これを行うには、コードを次のように変更します。

db.tx(t => {
    const queries = lst.map(l => {
        return t.one('INSERT INTO table(key, value) VALUES(${key}, ${value}) RETURNING id',
                       l, a => +a.id);
    });
    return t.batch(queries);
})
    .then(data => {
        // SUCCESS
        // data = array of new id-s;
    })
    .catch(error => {
        // ERROR
    });

つまり、変更は次のとおりです。

  • idは挿入しません
  • 各挿入から1つの行/オブジェクトを取得するために、メソッドnoneoneに置き換えます
  • RETURNING idクエリに追加して値を取得します
  • a => +a.id自動行変換を行うために追加します。参照して文字列としてPG-約束リターン整数をそのものを理解する+ためのものです。

アップデート-1

単一のINSERTクエリによる高性能アプローチについては、pg-promiseを使用した複数行の挿入を参照してください

アップデート-2

必読記事:データインポート

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

pg-promiseを使用した複数行の挿入

分類Dev

pg-promiseを使用した複数行の挿入

分類Dev

pg-promiseを使用した複数行の挿入

分類Dev

node-pg-migrate移行にレコードを挿入するにはどうすればよいですか?

分類Dev

pg-promiseを使用した追加データを使用した複数挿入

分類Dev

nodejspg-promiseライブラリを使用してuuid配列を含むレコードをpgテーブルに挿入する方法

分類Dev

pg-promiseヘルパー:挿入および複数更新のオプションフィールド

分類Dev

複数行の挿入/更新にpg-promiseヘルパーを使用して競合時に挿入を更新します

分類Dev

pg-promiseで成功するまでSQL挿入を繰り返す方法は?

分類Dev

pg-promiseを使用してjsonb []データを列に挿入する方法

分類Dev

Pg-promiseのパフォーマンスの向上:複数の更新パラメーターを持つ複数の挿入

分類Dev

pg-promiseで戻る

分類Dev

Node pg-promise、型キャストで複数の値をバインド

分類Dev

Heroku pg移行エラー「PG:DataCorrupted:Error」

分類Dev

PG :: ConnectionBadエラー

分類Dev

node-postgresを使用して複数の行をPGに適切に挿入するにはどうすればよいですか?

分類Dev

TypeError:pg-promise挿入で未定義のプロパティ 'then'を読み取ることができません

分類Dev

pg-promiseを使用して同じクエリ内で複数のデータベースを使用することは可能ですか?

分類Dev

RORにPGを使用する

分類Dev

pg-promiseでカーソルを使用する

分類Dev

pg-promiseでスキーマを設定する方法

分類Dev

pg-promiseでテーブルをロックする方法

分類Dev

pg-promiseで親と子のツリーを取得します

分類Dev

pg-promiseを使用した複合型

分類Dev

Postgres LISTEN / NOTIFY with pg-promise

分類Dev

pg-promise Dynamic Columns with CTE

分類Dev

UnhandledPromiseRejectionWarning for pg.Pool promise chaining

分類Dev

Pg-promise: chaining conditional queries

分類Dev

pg-promise and Row Level Security

Related 関連記事

  1. 1

    pg-promiseを使用した複数行の挿入

  2. 2

    pg-promiseを使用した複数行の挿入

  3. 3

    pg-promiseを使用した複数行の挿入

  4. 4

    node-pg-migrate移行にレコードを挿入するにはどうすればよいですか?

  5. 5

    pg-promiseを使用した追加データを使用した複数挿入

  6. 6

    nodejspg-promiseライブラリを使用してuuid配列を含むレコードをpgテーブルに挿入する方法

  7. 7

    pg-promiseヘルパー:挿入および複数更新のオプションフィールド

  8. 8

    複数行の挿入/更新にpg-promiseヘルパーを使用して競合時に挿入を更新します

  9. 9

    pg-promiseで成功するまでSQL挿入を繰り返す方法は?

  10. 10

    pg-promiseを使用してjsonb []データを列に挿入する方法

  11. 11

    Pg-promiseのパフォーマンスの向上:複数の更新パラメーターを持つ複数の挿入

  12. 12

    pg-promiseで戻る

  13. 13

    Node pg-promise、型キャストで複数の値をバインド

  14. 14

    Heroku pg移行エラー「PG:DataCorrupted:Error」

  15. 15

    PG :: ConnectionBadエラー

  16. 16

    node-postgresを使用して複数の行をPGに適切に挿入するにはどうすればよいですか?

  17. 17

    TypeError:pg-promise挿入で未定義のプロパティ 'then'を読み取ることができません

  18. 18

    pg-promiseを使用して同じクエリ内で複数のデータベースを使用することは可能ですか?

  19. 19

    RORにPGを使用する

  20. 20

    pg-promiseでカーソルを使用する

  21. 21

    pg-promiseでスキーマを設定する方法

  22. 22

    pg-promiseでテーブルをロックする方法

  23. 23

    pg-promiseで親と子のツリーを取得します

  24. 24

    pg-promiseを使用した複合型

  25. 25

    Postgres LISTEN / NOTIFY with pg-promise

  26. 26

    pg-promise Dynamic Columns with CTE

  27. 27

    UnhandledPromiseRejectionWarning for pg.Pool promise chaining

  28. 28

    Pg-promise: chaining conditional queries

  29. 29

    pg-promise and Row Level Security

ホットタグ

アーカイブ