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

Може ли INSERT [...] ON CONFLICT да се използва за нарушения на външния ключ?

Да, присъединете въведените си редове към посочената таблица, като по този начин премахнете редове без съвпадение в колоната FK:

INSERT INTO entries(entry_id, referenced_id, name)
SELECT val.entry_id, val.referenced_id, val.name
FROM  (
  VALUES (1, 2, 'references two')
         -- more?
  ) val (entry_id, referenced_id, name)
JOIN   referenced USING (referenced_id)  -- drop rows without matching FK
ON     CONFLICT (entry_id) DO NOTHING;   -- drop rows with duplicate id

Самият UPSERT (INSERT ... ON CONFLICT DO NOTHING ) реагира само на уникални нарушения. Ръководството:

ON CONFLICT може да се използва за определяне на алтернативно действие за издигане на грешка при нарушение на уникално ограничение или ограничение за изключване. (Вижте клауза ЗА КОНФЛИКТ по-долу.)

Тъй като VALUES изразът вече не е прикачен към INSERT директно, типовете колони не се извличат от целевата таблица. Може да се наложи да прехвърляте входни стойности изрично при работа с неосновни типове. Вижте:

  • Прехвърляне на NULL тип при актуализиране на няколко реда



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Начини за достъп до Oracle Database в PostgreSQL

  2. Как да персонализирате конфигурационния файл на официалното изображение на PostgreSQL Docker?

  3. Изпълнете заявка с LIMIT/OFFSET и получете общия брой редове

  4. PostgreSQL:Създайте таблица, ако не съществува AS

  5. Как да сравняваме масиви в PostgreSQL