Как игнорировать повторяющиеся ключи при использовании копирования в postgresql

Я использую COPY table_name FROM STDIN для импорта данных. Это очень эффективно, но при нарушении дубликатов ключей вся процедура будет остановлена. Есть ли способ обойти это?

почему postgresql просто не выдает предупреждение и не копирует остальные данные?

Вот пример:

 select * from "Demo1";
 Id | Name  | Age 
 ---+-------+-----
  1 | abc   |  20
  2 | def   |  22


COPY "Demo1" from STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 3    pqr     25
>> 4    xyz     26
>> 5    abc     21
>> \.

ERROR:  duplicate key value violates unique constraint "Demo1_Name_key"
DETAIL:  Key ("Name")=(abc) already exists.
CONTEXT:  COPY Demo1, line 3

Здесь поле «Имя» имеет уникальное ограничение. Поскольку строка «abc» уже присутствует в таблице. Игнорирование всего процесса.


person Pavan    schedule 03.02.2016    source источник
comment
Импортировать в промежуточную таблицу и вставлять оттуда по соответствующим правилам.   -  person Clodoaldo Neto    schedule 03.02.2016


Ответы (1)


Вы можете использовать любой из этих двух методов для импорта данных:

  1. COPY FROM (во временную таблицу). Отсеивайте сбои первичного ключа и импортируйте только достоверные данные.
  2. Используйте FDW (например, этот пример). Для Live Feeds/очень больших наборов данных рекомендуется использовать Foreign-Data-Wrappers, поскольку вам не нужно создавать временную копию (для ошибок/пропускать столбцы/пропускать строки и т. д.), и вы можете напрямую запускать оператор SELECT, пропуская любой столбец. / row и INSERT в целевую таблицу.
person Robins Tharakan    schedule 04.02.2016