我的用例如下:我有来自csv文件的数据,我需要将它加载到一个表中(到目前为止很好,这里没有什么新东西)。可能会发生相同的数据与更新的列一起发送,在这种情况下,我想尝试插入和替换重复的情况。
所以我的表格如下:
CREATE TABLE codes (
code TEXT NOT NULL,
position_x INT,
position_y INT
PRIMARY KEY (code)
);
传入的csv文件是这样的:
TEST01,1,1
TEST02,1,2
TEST0131,3
TEST04,1,4
可能会发生在将来的某个时候我会得到另一个csv文件:
TEST01,1,1000 <<<<< updated value
TEST05,1,5
TEST0631,6
TEST07,1,7
现在发生的事情就是当我为第一个文件运行时,一切都很好,但是当我执行第二个文件时,我收到一个错误:
2017-04-26T10:33:51.306000+01:00 ERROR Database error 23505: duplicate key value violates unique constraint "codes_pkey"
DETAIL: Key (code)=(TEST01) already exists.
我使用以下方式加载数据:
pgloader csv.load
我的csv.load文件如下所示:
LOAD CSV
FROM 'codes.csv' (code, position_x, position_y)
INTO postgresql://localhost:5432/codes?tablename=codes (code, position_x, position_y)
WITH fields optionally enclosed by '"',
fields terminated by ',';
我正在尝试用pgloader做什么?
我也尝试删除主键的约束,但最后我在表中找到了重复的条目。
非常感谢你的帮助。
答案 0 :(得分:1)
括号中的要解决(加载异常,例如PK违规),pgloader会将数据切割成25000行的批次 每个,所以当问题发生时,它只影响那么多行 数据。
- 我...
您可以做的最好的事情是将csv加载到具有相同结构的表中,然后在查询的帮助下合并数据(EXCEPT
,OUTER JOIN ... where null
等等)