Postgres Дебезиум не публикует sh предыдущее состояние записи - PullRequest
1 голос
/ 18 января 2020

Я успешно установил Postgres Debezium CDC. Теперь я могу отследить все изменения, происходящие с базой данных. Но проблема в том, что поле «до» всегда остается пустым. Итак, если я вставлю запись (id = 1, name = Bill), я получу от Кафки эти данные:

'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"
    }
}'

Что с этим не так и как я могу это исправить?

1 Ответ

1 голос
/ 20 января 2020

before - это необязательное поле, которое, если присутствует, содержит состояние строки до того, как произошло событие. Доступность этого поля зависит от настройки REPLICA IDENTITY для каждой таблицы.

REPLICA IDENTITY - это PostgreSQL специфицированный c параметр уровня таблицы, который определяет объем информации, доступной для логического декодирования в случае UPDATE и DELETE события.

Чтобы показать предыдущие значения всех столбцов таблицы, установите для уровня REPLICA IDENTITY значение FULL:

ALTER TABLE public.mytable REPLICA IDENTITY FULL;

Подробнее см. в документах Debezium. .

...