关于postgresql:关于勺子转换的更新给出了’重复键值违反了唯一约束’

Update on a spoon transformation gives 'duplicate key value violates unique constraint'

我正在尝试使用Kettle创建转换,该转换可以从我的数据库中读取表,然后连接到远程postgresql数据库,将新行插入远程数据库(或者如果值更改则更新,或者如果远程表具有 与我的表格相同的数据)。 它在插入时工作正常,但当它尝试更新行时,我收到以下错误:

1
2
3
4
5
6
INSERT / UPDATE.0 - ERROR (version 5.2.0.0, build 1 FROM 2014-09-30_19-48-28 BY buildguy) : Unexpected error
org.pentaho.di.core.exception.KettleStepException:
2014/10/15 16:52:54 - INSERT / UPDATE.0 - Error IN step, asking everyone TO stop because OF:
2014/10/15 16:52:54 - INSERT / UPDATE.0 - Error inserting/updating ROW
2014/10/15 16:52:54 - INSERT / UPDATE.0 - ERROR: duplicate KEY VALUE violates UNIQUE CONSTRAINT"test_pentaho_pkey"
2014/10/15 16:52:54 - INSERT / UPDATE.0 -   Detail: KEY (id)=(3) already EXISTS.

我很困惑为什么它试图插入因为id是主键,所以如果该id存在,它应该只更新它,而不是试图插入它。 我怎么能绕过这个? 我在插入/更新步骤设置中做错了什么?

这是我在勺子界面上的插入/更新步骤设置:

enter image description here

我的数据库表内容:

1
2
3
4
5
6
7
8
9
 id |    name    | age
----+------------+-----
  1 | ioqw       |  50
  2 | 12132      |  32
  4 | test_data1 |  24
  5 | test_data1 |  24
  6 | hello      |  24
  3 | hello3     |  50
(6 ROWS)

远程数据库表内容:

1
2
3
4
5
6
7
8
 id |    name    | age
----+------------+-----
  1 | ioqw       |  50
  2 | 12132      |  32
  3 | test_data  |  14
  4 | test_data1 |  24
  5 | test_data1 |  24
(5 ROWS)

我试图更新id = 3的远程表行。


从错误消息判断,目标表的主键仅在id列上。 但是,在更新组件中,您要求Spoon使用列idagename的组合键来确定是否存在条目(请参阅键下方的条目以查找值)。 您必须从此列表中删除列nameage