postgres 9.5でupsertを正しく行う方法

user1575921:

postgresql 9.5でのupsertの正しい構文、クエリの下にcolumn reference "gallery_id" is ambiguousエラーが表示されます、なぜですか?

var dbQuery = `INSERT INTO category_gallery (
  category_id, gallery_id, create_date, create_by_user_id
  ) VALUES ($1, $2, $3, $4)
  ON CONFLICT (category_id)
  DO UPDATE SET
  category_id = $1,
  last_modified_date = $3,
  last_modified_by_user_id = $4
  WHERE gallery_id = $2`;

エラーを表示するWHERE gallery_id = $2;ように変更しようとしWHERE category_gallery.gallery_id = $2;ましたがthere is no unique or exclusion constraint matching the ON CONFLICT specificationgallery_idまたはcategory_idを一意として設定したくないので、両方の列が同じであることを確認してから更新します...

postgres 9.5でupsertを正しく行うにはどうすればよいですか?

ON CONFLICT一意の列が必要な場合、他の方法を使用する必要がありますか?



複数の列の両方が競合してから更新を実行したいのですが、正しい使い方は何ですか

var dbQuery = `INSERT INTO category_gallery (
  category_id, gallery_id, create_date, create_by_user_id
  ) VALUES ($1, $2, $3, $4)
  ON CONFLICT (category_id, gallery_id)
  DO UPDATE SET
  category_id = $1,
  last_modified_date = $3,
  last_modified_by_user_id = $4
  WHERE gallery_id = $2`;


var dbQuery = `INSERT INTO category_gallery (
  category_id, gallery_id, create_date, create_by_user_id
  ) VALUES ($1, $2, $3, $4)
  ON CONFLICT (category_id AND gallery_id)
  DO UPDATE SET
  category_id = $1,
  last_modified_date = $3,
  last_modified_by_user_id = $4
  WHERE gallery_id = $2`;

テーブル(category_id、gallery_idは一意の列ではありません)

category_id | gallery_id | create_date | create_by_user_id | last_modified_date | last_modified_by_user_id
1 | 1 | ...  
1 | 2 | ...
2 | 2 | ...
1 | 3 | ...
ypercubeᵀᴹ:

ON CONFLICT構築物は、必要とUNIQUE仕事への制約を。INSERT .. ON CONFLICTのドキュメントから

オプションのON CONFLICT句は、一意の違反または除外制約違反エラーを発生させる代替アクションを指定します。挿入が提案された個々の行ごとに、挿入が続行されるか、conflict_targetで指定されたアービター制約またはインデックスに違反した場合は、代替のconflict_actionが実行されます。ON CONFLICT DO NOTHING代替アクションとして行を挿入することを単に避けます。ON CONFLICT DO UPDATE代替アクションとして、挿入が提案された行と競合する既存の行を更新します。

さて、質問はあまり明確ではありませんが、おそらくUNIQUE2つの列を組み合わせ制約が必要です(category_id, gallery_id)

ALTER TABLE category_gallery
    ADD CONSTRAINT category_gallery_uq
    UNIQUE (category_id, gallery_id) ;

挿入する行が両方の値とすでにテーブルにある行と一致する場合は、ではなくをINSERT実行しUPDATEます。

INSERT INTO category_gallery (
  category_id, gallery_id, create_date, create_by_user_id
  ) VALUES ($1, $2, $3, $4)
  ON CONFLICT (category_id, gallery_id)
  DO UPDATE SET
    last_modified_date = EXCLUDED.create_date,
    last_modified_by_user_id = EXCLUDED.create_by_user_id ;

UNIQUE制約のいずれかの列を使用できます。

  ON CONFLICT (category_id, gallery_id) 

または制約名:

  ON CONFLICT ON CONSTRAINT category_gallery_uq  

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

postgres 9.5でupsertを正しく行う方法

分類Dev

postgres 9.5でupsertを正しく行う方法

分類Dev

postgres:selectmaxは10ではなく9を返します

分類Dev

HTML5shivを正しく使用する方法... IE 9、Firefox、Safariでの動作

分類Dev

Jetty 9.xProxyServlet-XMLでServletContextを正しく設定する方法

分類Dev

jpsでpostgres9を使用するとJelastic環境が機能しないのはなぜですか?

分類Dev

Postgresで午前9時未満の時間を使用してすべてのデータを削除する

分類Dev

postgres 9でTOASTを使用している行または列を見つけます(そしてTOAST uasgeを減らします)?

分類Dev

バイト配列に関してpostgres jdbc 8.4と9の間で何が変更されましたか?

分類Dev

Postgresはc9.ioを使用してRubyonRailsアプリのサーバーに接続しません

分類Dev

PostgresでIN(日付範囲)を実行する正しい方法は何ですか?

分類Dev

PostgresでIN(日付範囲)を実行する正しい方法は何ですか?

分類Dev

iOS9でポップオーバーArrowDirectionsを正しく表示する方法

分類Dev

Postgresデータを正しくグループ化する方法

分類Dev

postgresでUPSERT操作のINSERTED行とUPDATED行を取得するにはどうすればよいですか?

分類Dev

Mod 10 ^ 9 +7を正しく使用する方法

分類Dev

Odoo 9 2つの文字を正しく連結する方法は?

分類Dev

Postgres upsert:新しい行と更新された行を区別する

分類Dev

xdmp.Spawn()を使用してMarkLogic 9で一時的な削除を行う方法は?

分類Dev

nodejs / expressで非同期postgresを使用する正しい方法は?

分類Dev

Postgres で正しい現地時間を返す方法

分類Dev

Postgres 9へのDBLinkのインストール

分類Dev

Golangを使用してPostgresに多くの行をすばやく追加する方法

分類Dev

Cloud9でのPostgresデータベースのセットアップがsudoパスワードを要求する

分類Dev

postgresで行をjsonbとして集約

分類Dev

postgresでロールにstatement_timeoutを正しく設定する

分類Dev

postgresの挿入/更新で一重引用符を正しく区切ります

分類Dev

JShell <Shift + tab i>がjdk 9で正しく機能しない

分類Dev

UITableViewAutomaticDimensionがiOS9で正しく機能しない

Related 関連記事

  1. 1

    postgres 9.5でupsertを正しく行う方法

  2. 2

    postgres 9.5でupsertを正しく行う方法

  3. 3

    postgres:selectmaxは10ではなく9を返します

  4. 4

    HTML5shivを正しく使用する方法... IE 9、Firefox、Safariでの動作

  5. 5

    Jetty 9.xProxyServlet-XMLでServletContextを正しく設定する方法

  6. 6

    jpsでpostgres9を使用するとJelastic環境が機能しないのはなぜですか?

  7. 7

    Postgresで午前9時未満の時間を使用してすべてのデータを削除する

  8. 8

    postgres 9でTOASTを使用している行または列を見つけます(そしてTOAST uasgeを減らします)?

  9. 9

    バイト配列に関してpostgres jdbc 8.4と9の間で何が変更されましたか?

  10. 10

    Postgresはc9.ioを使用してRubyonRailsアプリのサーバーに接続しません

  11. 11

    PostgresでIN(日付範囲)を実行する正しい方法は何ですか?

  12. 12

    PostgresでIN(日付範囲)を実行する正しい方法は何ですか?

  13. 13

    iOS9でポップオーバーArrowDirectionsを正しく表示する方法

  14. 14

    Postgresデータを正しくグループ化する方法

  15. 15

    postgresでUPSERT操作のINSERTED行とUPDATED行を取得するにはどうすればよいですか?

  16. 16

    Mod 10 ^ 9 +7を正しく使用する方法

  17. 17

    Odoo 9 2つの文字を正しく連結する方法は?

  18. 18

    Postgres upsert:新しい行と更新された行を区別する

  19. 19

    xdmp.Spawn()を使用してMarkLogic 9で一時的な削除を行う方法は?

  20. 20

    nodejs / expressで非同期postgresを使用する正しい方法は?

  21. 21

    Postgres で正しい現地時間を返す方法

  22. 22

    Postgres 9へのDBLinkのインストール

  23. 23

    Golangを使用してPostgresに多くの行をすばやく追加する方法

  24. 24

    Cloud9でのPostgresデータベースのセットアップがsudoパスワードを要求する

  25. 25

    postgresで行をjsonbとして集約

  26. 26

    postgresでロールにstatement_timeoutを正しく設定する

  27. 27

    postgresの挿入/更新で一重引用符を正しく区切ります

  28. 28

    JShell <Shift + tab i>がjdk 9で正しく機能しない

  29. 29

    UITableViewAutomaticDimensionがiOS9で正しく機能しない

ホットタグ

アーカイブ