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

postgres9.5でアップサートを正しく行う方法

    ON CONFLICT コンストラクトにはUNIQUEが必要です 動作する制約。 INSERT .. ON CONFLICT 条項

    さて、質問はあまり明確ではありませんが、おそらくUNIQUEが必要です 結合された2つの列に対する制約:(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  
    


    1. 既存のテーブルからテーブル(構造)を作成する

    2. テーブル値パラメーターをパラメーター化されたSQLステートメントに渡すときの「スカラー変数を宣言する必要があります」エラー

    3. MYSQL-外部キーを作成できません

    4. SQLAlchemyの複雑な外部キー制約