PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak poprawnie zrobić upsert w postgresie 9.5

ON CONFLICT konstrukcja wymaga UNIQUE ograniczenie do pracy. Z dokumentacji dotyczącej INSERT .. ON CONFLICT klauzula :

Teraz pytanie nie jest zbyt jasne, ale prawdopodobnie potrzebujesz UNIQUE ograniczenie na 2 połączone kolumny:(category_id, gallery_id) .

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

Jeśli wiersz do wstawienia pasuje do obydwóch wartości z wierszem już w tabeli, a następnie zamiast INSERT , wykonaj 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 ;

Możesz użyć jednej z kolumn ograniczenia UNIQUE:

  ON CONFLICT (category_id, gallery_id) 

lub nazwę ograniczenia:

  ON CONFLICT ON CONSTRAINT category_gallery_uq  


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. fe_sendauth:brak błędu podanego hasła w postgresql + laravel

  2. Dublowanie bazy danych / replikacja strumieniowa Postgres

  3. Argumenty wiersza poleceń PSQL w skrypcie DO

  4. Jak wylistować rekordy z datą z ostatnich 10 dni?

  5. Jak poznać strefę czasową znacznika czasu w postgresql 8.3?