PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как правилно да направите upsert в postgres 9.5

ON CONFLICT конструкцията изисква UNIQUE ограничение за работа. От документацията за INSERT .. ON CONFLICT клауза :

Сега въпросът не е много ясен, но вероятно имате нужда от UNIQUE ограничение на комбинираните 2 колони:(category_id, gallery_id) .

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

Ако редът за вмъкване съвпада с и двата стойности с ред, който вече е в таблицата, след това вместо INSERT , направете 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 ;

Можете да използвате колоните на ограничението UNIQUE:

  ON CONFLICT (category_id, gallery_id) 

или името на ограничението:

  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. Ръководство за използване на клаузата WITH в SQL

  2. Поставяне на изход от Postgres \i input във файл?

  3. Защо SQL идентификационните последователности излизат от синхрон (по-специално с помощта на Postgres)?

  4. Компромиси при внедряване на горещ режим на готовност

  5. JDBC драйвер на Postgres:PSQLException:синтактична грешка при или близо до RETURNING