sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo hacer upsert correctamente en postgres 9.5

El ON CONFLICT la construcción requiere un UNIQUE restricción para trabajar. De la documentación en INSERT .. ON CONFLICT cláusula :

Ahora, la pregunta no es muy clara, pero probablemente necesite un UNIQUE restricción en las 2 columnas combinadas:(category_id, gallery_id) .

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

Si la fila que se va a insertar coincide con ambas valores con una fila ya en la tabla, entonces en lugar de INSERT , haz una 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 ;

Puede usar las columnas de la restricción ÚNICA:

  ON CONFLICT (category_id, gallery_id) 

o el nombre de la restricción:

  ON CONFLICT ON CONSTRAINT category_gallery_uq