2017-07-15 18 views
1

私はPostgres、NodeJS、Knexを使用しています。一意のフィールドとnode.jsとpostgres bulk upsertまたは別のパターン?

  1. データベーステーブル:

    は、私は次のような状況があります。

    :私はオブジェクトの配列を持っていると私はする必要がNodeJSで

  2. 。テーブルにユニークIDが含まれていない場合は、新しい行を挿入するか、

    bと入力します。テーブルに一意のIDが含まれている場合は、残りのフィールドを更新します。私の知識から

私は3つのオプションがあります。

  1. データベースに存在する場合は、各チェックし、応答に基づいて、更新または挿入を行うには、クエリを実行します。これは、各配列項目と挿入または更新の呼び出しがあるため、リソースのコストがかかります。
  2. idが配列内にあるすべての行を削除し、挿入を実行します。これは2つの操作だけを意味しますが、オートインクリメントフィールドは増え続けます。
  3. Postgres 9.5がそれをサポートしてからupsertを実行します。一括アップロードは機能しているようで、データベースへの呼び出しのみです。

私が知っているオプションを見てみると、upsertは最も合理的なようですが、何か欠点がありますか?

答えて

1

Upsertは一般的な方法です。

もう一つの方法は、それがより速くなるでしょう。別の挿入/更新操作を使用し、最も可能性が高い:

  1. は、(*)の結果によって既存の行 select id from t where id in (object-ids)(*)

  2. 更新既存の行を定義します

  3. アレイを(*)でフィルタリングし、新しい行をバルク挿入します。

が同じ質問here

のためのより多くの詳細を参照してください。
関連する問題