接收批处理错误,在talend上运行更新到PostgreSQL数据库

时间:2017-04-08 17:22:37

标签: postgresql talend

我有一个talend解决方案,里面有一个tMap --> tPostgreSQLOutput

架构内部是integer(关键字段)和日期(时间戳),格式为"dd-MM-yyyy HH:mm:ss"。目的是使用当前时间/日期(时间戳)更新日期字段。

在tMap中使用此talend函数调用设置日期:

TalendDate.parseDate("yyyy-MM-dd HH:mm:ss", TalendDate.getDate("yyyy-MM-dd HH:mm:ss")) 

我已经确认了日期(时间戳)格式,并确认了PostgreSQL数据库中的时间戳数据类型。但是,我在运行时收到此错误:

Batch entry 0 UPDATE "bitcoin_options" SET "last_notified" = 2017-04-08 12:02:40.000000 -05:00:00 WHERE "id" = 3 was aborted.  Call getNextException to see the cause.

我把错误的查询带到了PostgreSQL并手动运行。我收到了这个回复:

ERROR:  syntax error at or near "11"
LINE 1: ...bitcoin_options" SET "last_notified" = 2017-04-08 11:53:11.0...
                                                             ^

再次,我检查了格式,数据类型,并将它们与其他表及其UPSERTS进行了比较。格式相同。相同的数据类型。

此外,我试图在日期和时间之间添加第二个空格,但没有用。

更新1

我将tMap输出更新为:

TalendDate.getCurrentDate();

并得到了同样的错误。 感谢

更新2

这是Talend的布局:

enter image description here

2 个答案:

答案 0 :(得分:4)

我明白了。经过多次试验和错误。 tPostgresSQLCommit x3是多余的。当我删除前两个并放置一个时,它给了我正确的输出。

经验教训:你只需要1次提交。

答案 1 :(得分:2)

请注意您的时间戳格式不正确: UPDATE "bitcoin_options" SET "last_notified" = '2017-04-08 12:02:40.000000 -05:00:00' WHERE "id" = 3

它缺少时间戳周围的单引号。如果你加上那些你应该很好。