当我在PostgreSQL 10上用主键创建表时
create table test (t1 int, t2 varchar, primary key(id));
并使用wal2json和这些SQL通过Debezium将数据从PostgreSQL流到Kafka
insert into test values (1, 'Test1');
update test set t2='Test2' where t1=1;
delete from test where t1=1;
我从kafka消费者处获得了这些JSON
:
插入( C 版本)
{
"before": null,
"after": {
"t1": 1,
"t2": "Test1"
...
}
U 日期
{
"before": {
"t1": 1,
"t2": null
},
"after": {
"t1": 1,
"t2": "Test2"
...
}
D 删除
{
"before": {
"t1": 1,
"t2": null
},
"after": null,
...
}
但是当我创建没有主键
的表时create table test (t1 int, t2 varchar);
并将数据从PostgreSQL流传输到Kafka,我仅获得JSON
的{{1}},而不是insert
和update
的
delete
我已经阅读了documentation,其中指出
wal2json插件不会为没有主键的表发出事件
因此,在没有主键的表上使用CDC来同时获得{
"before": null,
"after": {
"t1": 1,
"t2": "Test1"
...
}
和update
的情况下,是否存在任何解决方法? (因为几乎所有表都已创建,没有主键)
答案 0 :(得分:0)
您依靠wal2json
吗?如果不是这样,而您使用的是PostgreSQL 10及更高版本,则可以尝试使用一种新的pgoutput
可用的OOTB解码器。它可能会解决您的问题。