使wal2json监听没有主键的表

时间:2019-07-26 13:30:01

标签: postgresql apache-kafka debezium wal

当我在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}},而不是insertupdate

delete

我已经阅读了documentation,其中指出

  

wal2json插件不会为没有主键的表发出事件

因此,在没有主键的表上使用CDC来同时获得{ "before": null, "after": { "t1": 1, "t2": "Test1" ... } update的情况下,是否存在任何解决方法? (因为几乎所有表都已创建,没有主键

1 个答案:

答案 0 :(得分:0)

您依靠wal2json吗?如果不是这样,而您使用的是PostgreSQL 10及更高版本,则可以尝试使用一种新的pgoutput可用的OOTB解码器。它可能会解决您的问题。