2

我正在使用 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”已经存在于表中。它忽略了整个过程。

4

1 回答 1

1

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

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