sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan laver du upsert korrekt i postgres 9.5

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  


  1. Vælg alle poster fra en tabel, der ikke findes i en anden tabel i Laravel 5.1

  2. Oracle SQL sammenligner datoer

  3. Mysql:Bestil efter like?

  4. MySQL Sorter efter kolonne =x, kolonne asc?