Заставить wal2json слушать таблицы без первичного ключа

Когда я создаю таблицу с Первичным ключом в PostgreSQL 10

create table test (t1 int, t2 varchar, primary key(id));

и передавать данные из PostgreSQL в Kafka через Debezium, используя wal2json с этими SQL

insert into test values (1, 'Test1');
update test set t2='Test2' where t1=1;
delete from test where t1=1;

Я получаю эти JSON от kafka Consumer:

Вставить (Cсоздать)

{
  "before": null,
  "after": {
    "t1": 1,
    "t2": "Test1"
  ...
}

Обновление

{
  "before": {
    "t1": 1,
    "t2": null
  },
  "after": {
    "t1": 1,
    "t2": "Test2"
  ...
}

Удалитьудалить

{
  "before": {
    "t1": 1,
    "t2": null
  },
  "after": null,
  ...
}

Но когда я создаю таблицу без первичного ключа

create table test (t1 int, t2 varchar);

и передавать данные из PostgreSQL в Kafka, я получаю JSON только для insert, а не для update и delete

{
  "before": null,
  "after": {
    "t1": 1,
    "t2": "Test1"
  ...
}

Я прочитал эту документацию, в которой говорится, что

Плагин wal2json не генерирует события для таблиц без первичных ключей

Таким образом, есть ли какое-либо обходное решение для использования CDC в таблицах без Primary Key, чтобы также получить update и delete? (Поскольку почти все таблицы уже были созданы без Primary Key)


person Prince Vegeta    schedule 26.07.2019    source источник


Ответы (1)


вы зависите от wal2json? Если нет, и вы используете PostgreSQL 10 и выше, вы можете попробовать новый декодер pgoutput, доступный OOTB. Это может решить вашу проблему.

person Jiri Pechanec    schedule 01.08.2019
comment
Спасибо за ваш ответ, но мы зависим от wal2json :( - person Prince Vegeta; 01.08.2019