Le ON CONFLICT
la construction nécessite un UNIQUE
contrainte de travailler. À partir de la documentation sur INSERT .. ON CONFLICT
clause
:
Maintenant, la question n'est pas très claire mais vous avez probablement besoin d'un UNIQUE
contrainte sur les 2 colonnes combinées :(category_id, gallery_id)
.
ALTER TABLE category_gallery
ADD CONSTRAINT category_gallery_uq
UNIQUE (category_id, gallery_id) ;
Si la ligne à insérer correspond aux les deux valeurs avec une ligne déjà sur la table, puis au lieu de INSERT
, faites une 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 ;
Vous pouvez utiliser soit les colonnes de la contrainte UNIQUE :
ON CONFLICT (category_id, gallery_id)
ou le nom de la contrainte :
ON CONFLICT ON CONSTRAINT category_gallery_uq