是否可以使用pgloader插入和替换行?

时间:2017-04-26 11:03:51

标签: postgresql csv pgloader

我的用例如下:我有来自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做什么?

我也尝试删除主键的约束,但最后我在表中找到了重复的条目。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

不,你不能。根据{{​​3}}

  

要解决(加载异常,例如PK违规),pgloader会将数据切割成25000行的批次   每个,所以当问题发生时,它只影响那么多行   数据。

括号中的

- 我...

您可以做的最好的事情是将csv加载到具有相同结构的表中,然后在查询的帮助下合并数据(EXCEPTOUTER JOIN ... where null等等)