PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie man Upsert in Postgres 9.5 richtig durchführt

Der ON CONFLICT Konstrukt erfordert einen UNIQUE Einschränkung zu arbeiten. Aus der Dokumentation zu INSERT .. ON CONFLICT Klausel :

Nun, die Frage ist nicht ganz klar, aber Sie brauchen wahrscheinlich einen UNIQUE Einschränkung für die beiden kombinierten Spalten:(category_id, gallery_id) .

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

Wenn die einzufügende Zeile mit beidem übereinstimmt Werte mit einer Zeile bereits in der Tabelle, dann statt INSERT , führen Sie ein UPDATE durch :

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 ;

Sie können eine der Spalten der UNIQUE-Einschränkung verwenden:

  ON CONFLICT (category_id, gallery_id) 

oder der Beschränkungsname:

  ON CONFLICT ON CONSTRAINT category_gallery_uq