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

Най-добрият начин за предотвратяване на дублиране на данни при копиране на csv postgresql

Upsert

Отговорът от Linoff е правилен, но може да се опрости малко чрез Нова функция ”UPSERT“ на Postgres 9.5 (известен още като MERGE ). Тази нова функция е внедрена в Postgres като INSERT ON CONFLICT синтаксис.

Вместо изрично да проверяваме за нарушение на уникалния индекс, можем да позволим на ON CONFLICT клауза открива нарушението. Тогава ние DO NOTHING , което означава, че изоставяме усилията да INSERT без да си правите труда да опитате UPDATE . Така че, ако не можем да вмъкнем, просто преминаваме към следващия ред.

Получаваме същите резултати като кода на Linoff, но губим WHERE клауза.

INSERT INTO bigtable(col1, … )
    SELECT col1, …
    FROM stagingtable st
ON CONFLICT idx_bigtable_col1_col2_col
DO NOTHING
;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Задайте празните низове ('') на NULL в цялата база данни

  2. Грешката, върната от db.Exec(...) има ли код?

  3. Postgresql csv импортиране, което пропуска редове

  4. Състояние на SQL:42883, нито една функция не съответства на даденото име и типове аргументи. Но тази функция действително съществува

  5. В PostgreSQL, странен проблем относно производителността на citext?