Используйте refreshable materialized views
Пользовательские ключи сортировки без refreshable materialized views
Выбирайте столбцы ключа сортировки, которые не меняются для одной и той же строки
tenant_id, id) в качестве ключа сортировки. Эти столбцы однозначно идентифицируют каждую строку, а значение tenant_id остаётся неизменным для данного id, даже если другие столбцы меняются. Поскольку дедупликация по id совпадает с дедупликацией по (tenant_id, id), это помогает избежать проблем с дедупликацией данных, которые могли бы возникнуть, если бы tenant_id менялся.
Настройте REPLICA IDENTITY в таблицах Postgres для пользовательского ключа сортировки
REPLICA IDENTITY в таблицах так, чтобы он включал столбцы ключа сортировки. Это необходимо для точной обработки операций DELETE.
Если REPLICA IDENTITY не включает столбцы ключа сортировки, Postgres CDC не будет фиксировать значения столбцов, кроме столбцов первичного ключа, — это ограничение механизма logical decoding в Postgres. Во всех столбцах ключа сортировки, не входящих в первичный ключ Postgres, будут значения NULL. Это влияет на дедупликацию: предыдущая версия строки может не быть дедуплицирована с последней версией, помеченной как удалённая (где _peerdb_is_deleted равно 1).
В приведённом выше примере с owneruserid и id, если первичный ключ ещё не включает owneruserid, необходимо создать UNIQUE INDEX по (owneruserid, id) и назначить его как REPLICA IDENTITY для таблицы. Это гарантирует, что Postgres CDC будет фиксировать нужные значения столбцов для точной репликации и дедупликации.
Ниже приведён пример того, как это сделать для таблицы events. Обязательно примените это ко всем таблицам с изменёнными ключами сортировки.