ON CONFLICT
konstruktion kræver en UNIQUE
begrænsning af arbejdet. Fra dokumentationen på INSERT .. ON CONFLICT
klausul
:
Nu er spørgsmålet ikke særlig klart, men du har sandsynligvis brug for en UNIQUE
begrænsning på de 2 kolonner kombineret:(category_id, gallery_id)
.
ALTER TABLE category_gallery
ADD CONSTRAINT category_gallery_uq
UNIQUE (category_id, gallery_id) ;
Hvis rækken, der skal indsættes, matcher begge værdier med en række allerede i tabellen, derefter i stedet for INSERT
, lav en 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 ;
Du kan bruge enten kolonnerne i UNIQUE-begrænsningen:
ON CONFLICT (category_id, gallery_id)
eller begrænsningsnavnet:
ON CONFLICT ON CONSTRAINT category_gallery_uq