我们有一个 Kafka 主题,其中包含 JSON 模式格式的 Cloud Events,我们使用 JDBC 接收器连接到 Timescaledb/PostgreSQL。
要将表转换为超表,我们需要一个时间列,但是 golang 应用程序生成的事件中的日期时间格式包含纳秒:
2024-06-23T19:36:00.104215111Z
,并且与具有时区格式的 PostgreSQL 时间戳不兼容,因此 Kafka Connect 返回如下错误这个:
Batch entry 0 INSERT INTO \"test3_new\" (\"allowed\",\"specversion\",\"id\",\"source\",\"time\",\"type\",\"relation\",\"username\",\"object\") VALUES (('TRUE'),('1.0'),('1718828631'),('auth/v1/check'),('2024-06-19T20:23:51.18607753Z'),('auth.check'),('reader'),('user:user1592'),('cluster:example-cluster-us-east'))
was aborted: ERROR: column \"time\" is of type timestamp with time zone but expression is of type character varying\n
Hint: You will need to rewrite or cast the expression.
我找不到一种将数据转换为正确格式的方法,例如使用 Kafka Connect 转换 或一些内置 Timescale/Postgres 函数 进行自动转换,可以在这里工作。
与此同时,我发现了这个问题:https://github.com/confluenceinc/kafka-connect-jdbc/issues/921,看起来在连接字符串末尾添加
?stringtype=unspecified
效果很好。