我的用例如下:我有来自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做的事有可能吗?
我还尝试删除主键的约束,但最后在表中出现了重复条目。
非常感谢你的帮助。
发布于 2017-04-26 11:41:28
不,你不能。根据参考文献的说法
为了解决这个问题(加载异常,例如PK违规),pgloader将数据分成25000行,这样当出现问题时,它只会影响到那么多行数据。
在括号里-我的.
最好的方法是将csv加载到具有相同结构的表中,然后借助查询(EXCEPT、OUTER JOIN ... where null等)合并数据。
https://stackoverflow.com/questions/43632349
复制相似问题