sql >> Databáze >  >> RDS >> PostgreSQL

Jak správně provést upsert v postgresu 9.5

ON CONFLICT konstrukt vyžaduje UNIQUE omezení pracovat. Z dokumentace na INSERT .. ON CONFLICT doložka :

Nyní otázka není příliš jasná, ale pravděpodobně potřebujete UNIQUE omezení na kombinaci 2 sloupců:(category_id, gallery_id) .

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

Pokud řádek, který má být vložen, odpovídá oběma hodnoty s řádkem již v tabulce, pak místo INSERT , proveďte 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 ;

Můžete použít buď sloupce podmínky UNIQUE:

  ON CONFLICT (category_id, gallery_id) 

nebo název omezení:

  ON CONFLICT ON CONSTRAINT category_gallery_uq  


  1. Jak QUARTER() funguje v MariaDB

  2. Jak přidat dynamický sloupec do existující tabulky

  3. Skript pro změnu všech tabulek a polí na řazení utf-8-bin v MYSQL

  4. PHP - Export MySQL tabulek do souboru JSON