sql >> Database >  >> RDS >> PostgreSQL

Hoe upsert correct te doen in postgres 9.5

De ON CONFLICT constructie vereist een UNIQUE beperking om te werken. Uit de documentatie op INSERT .. ON CONFLICT clausule :

Nu is de vraag niet erg duidelijk, maar je hebt waarschijnlijk een UNIQUE . nodig beperking op de 2 kolommen gecombineerd:(category_id, gallery_id) .

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

Als de in te voegen rij overeenkomt met beide waarden met een rij die al in de tabel staat, dan in plaats van INSERT , doe een 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 ;

U kunt de kolommen van de UNIQUE-beperking gebruiken:

  ON CONFLICT (category_id, gallery_id) 

of de naam van de beperking:

  ON CONFLICT ON CONSTRAINT category_gallery_uq  


  1. Is MS-SQL EN/OF voorwaardelijk (kortsluitingsevaluatie uitvoeren)?

  2. Het verschil vinden tussen twee waarden in dezelfde kolom in MySQL

  3. Toestemming geweigerd bij het importeren van een CSV-bestand vanuit PGAdmin

  4. PSQLEException:ResultSet niet goed gepositioneerd, misschien moet je hierna bellen