如何在postgresql中使用copy时忽略重复键

时间:2016-02-03 07:51:41

标签: postgresql postgresql-copy

我使用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"已存在于表格中。它无视整个过程。

1 个答案:

答案 0 :(得分:0)

您可以使用以下两种方法之一导入数据:

  1. COPY FROM(到临时表)。清除主键故障并仅导入有效数据。
  2. 使用FDW(例如this示例)。对于Live Feeds /非常大的数据集,建议使用Foreign-Data-Wrappers,因为您不需要创建临时副本(对于错误/跳过列/跳过行等),并且可以直接运行SELECT语句将任何列/行和INSERT跳过到目标表中。