我使用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"已存在于表格中。它无视整个过程。
答案 0 :(得分:0)
您可以使用以下两种方法之一导入数据:
COPY FROM
(到临时表)。清除主键故障并仅导入有效数据。FDW
(例如this示例)。对于Live Feeds /非常大的数据集,建议使用Foreign-Data-Wrappers,因为您不需要创建临时副本(对于错误/跳过列/跳过行等),并且可以直接运行SELECT
语句将任何列/行和INSERT
跳过到目标表中。