Postgres Debezium 不发布记录的先前状态

Jac*_*ian 6 postgresql apache-kafka-connect debezium

我成功安装了Postgres Debezium CDC。现在,我能够捕获数据库发生的所有更改。但问题是“之前”字段始终为空。因此,如果我插入一条记录,(id = 1, name = Bill)我就会从 Kafka 获取以下数据:

'payload': {'before': None, 'after': {'id': 1, 'name': 'Bill'}, ...
Run Code Online (Sandbox Code Playgroud)

但如果我像这样更新记录:

UPDATE mytable set name = 'Bob' WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

我从卡夫卡那里得到这个:

'payload': {'before': None, 'after': {'id': 1, 'name': 'Bob'}, ...
Run Code Online (Sandbox Code Playgroud)

这就是我配置连接器的方式:

'payload': {'before': None, 'after': {'id': 1, 'name': 'Bill'}, ...
Run Code Online (Sandbox Code Playgroud)

这是什么问题?我该如何解决?

Isk*_*der 11

before是一个可选字段,如果存在,则包含事件发生之前行的状态。该字段是否可用很大程度上取决于REPLICA IDENTITY每个表的设置。

\n\n

REPLICA IDENTITY是 PostgreSQL 特定的表级设置,它确定在以下情况下可用于逻辑解码的信息量:UPDATE是 PostgreSQL 特定的表级设置,它确定在发生DELETE

\n\n

要显示所有 table\xe2\x80\x99s 列的先前值,请将级别设置REPLICA IDENTITYFULL

\n\n
ALTER TABLE public.mytable REPLICA IDENTITY FULL;\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅Debezium 文档中的更多详细信息

\n