Обновить

Комментарии 2

А как вы удаление записи обнаружите? если не ошибаюсь, то описанный вами подход помогает обнаружить только добавленные и обновлённые записи.

Добрый день!

Да, вы правы, удаление не затрагивается. Метод хорошо подходит для обнаружения вставленных и изменённых записей, но не позволяет определить физическое удаление, потому что после удаления следующий запрос не найдет Dt_Ins и Dt_Upd.

Поэтому я вижу 2 варианта:

  • Добавить в таблицу дополнительное поле, например is_deleted. Тогда вместо физического удаления в исходной базе можно устанавливать соответствующий признак и обновлять дату изменения. Такая запись попадёт в инкрементальную выборку, а на базе-получателе можно реализовать необходимую логику: установить такой же признак или уже физически удалить запись.

  • Использовать другой метод CDC, который лучше подходит для отслеживания операций удаления. Для PostgreSQL одним из подходящих вариантов является чтение журнала транзакций WAL.

В рамках этой статьи я сосредоточился на сценарии обработки вставленных и изменённых записей, чтобы не перегружать материал, который и так получился очень объемным. Работу с CDC на основе WAL планирую разобрать в одной из следующих статей.

Большое спасибо за комментарий!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации