gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:43:56 25 4
gpt4 key购买 nike

我安装成功 Postgres Debezium CDC .现在,我能够捕捉到数据库发生的所有变化。但问题是“之前”字段始终为空。所以,如果我插入一条记录 (id = 1, name = Bill)然后我从 Kafka 得到这个数据:

'payload': {'before': None, 'after': {'id': 1, 'name': 'Bill'}, ...

但是,如果我像这样更新记录:
UPDATE mytable set name = 'Bob' WHERE id = 1

我从卡夫卡那里得到这个:
'payload': {'before': None, 'after': {'id': 1, 'name': 'Bob'}, ...

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

curl -X POST  localhost:8083/connectors/ \
-H "Accept:application/json" -H "Content-Type:application/json" -d \
'{
"name": "test-connector",
"config": {
"connector.class": "io.debezium.connector.postgresql.PostgresConnector",
"tasks.max": "1",
"plugin.name": "pgoutput",
"database.hostname": "postgres",
"database.port": "5432",
"database.user": "postgres",
"database.password": "postgres",
"database.dbname" : "test",
"database.server.name": "postgres",
"database.whitelist": "public.mytable",
"database.history.kafka.bootstrap.servers": "kafka:9092",
"database.history.kafka.topic": "public.topic"
}
}'

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

最佳答案

before是一个可选字段,如果存在,则包含事件发生前行的状态。此字段是否可用高度依赖于 REPLICA IDENTITY每个表的设置。

REPLICA IDENTITY 是PostgreSQL特定的表级设置,它决定了在UPDATE情况下可用于逻辑解码的信息量。和 DELETE事件。

要显示所有表格列的先前值,请设置 REPLICA IDENTITY级别到 FULL :

ALTER TABLE public.mytable REPLICA IDENTITY FULL;

更多详情请见 Debezium docs .

关于postgresql - Postgres Debezium 不发布记录的先前状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59799503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com