2017-04-26 34 views
0

我的用例如下:我的数据来自csv文件,我需要将它加载到一个表格中(迄今为止这么好,没有新的东西)。可能会发生相同的数据与更新的列一起发送,在这种情况下,如果重复,我想尝试插入和替换。是否可以使用pgloader插入和替换行?

所以我的表如下:

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 

现在正在发生的事情是当我跑第一个文件时,一切都很好,但是当我e xecute对于第二个我得到一个错误:

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 ','; 

是什么

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做到这一点吗?

我也尝试删除主键的约束,但最终我在表中有重复的条目。

非常感谢您的帮助。

回答

1

不,你不能。按照reference

To work around that (load exceptions, eg PK violations), pgloader cuts the data into batches of 25000 rows each, so that when a problem occurs it's only impacting that many rows of data.

括号

- 我的...

你能做的最好的是负载CSV与相同结构表,然后用查询的帮助(EXCEPTOUTER JOIN ... where null等)的数据合并

+0

Thx为您的答案!以下是作者提供的一些额外信息,以及在问题中解释的实现所需结果的替代方法 - https://github.com/dimitri/pgloader/issues/540#issuecomment-297372388 – ktulinho

相关问题