リフレッシュ可能なマテリアライズドビューを使用する
リフレッシュ可能なマテリアライズドビューを使わないカスタム順序キー
各行で変化しない 順序キー カラムを選択する
tenant_id, id) を使用するのが適切です。これらのカラムは各行を一意に識別し、tenant_id は他のカラムが変わっても、特定の id に対して一定のままです。id による重複排除は (tenant_id, id) による重複排除と整合するため、tenant_id が変わることで発生しうるデータの重複排除の問題を回避しやすくなります。
Postgres テーブルで Replica Identity をカスタム順序キーに設定する
REPLICA IDENTITY を変更して、順序キーのカラムを含めることが重要です。これは DELETE を正確に処理するうえで不可欠です。
REPLICA IDENTITY に順序キーのカラムが含まれていない場合、Postgres CDC (変更データキャプチャ) は主キー以外のカラム値を取得できません。これは Postgres のロジカルデコードの制限によるものです。その結果、Postgres では主キー以外の順序キーカラムがすべて NULL になります。これにより重複排除に影響が生じ、行の以前のバージョンが、最新の削除済みバージョン (_peerdb_is_deleted が 1 に設定されたもの) と重複排除されない可能性があります。
上記の owneruserid と id の例では、主キーに owneruserid がすでに含まれていない場合、(owneruserid, id) に対する UNIQUE INDEX を作成し、それをそのテーブルの REPLICA IDENTITY として設定する必要があります。これにより、Postgres CDC (変更データキャプチャ) が正確なレプリケーションと重複排除に必要なカラム値を取得できるようになります。
以下は、events テーブルでこれを行う方法の例です。順序キーを変更したすべてのテーブルに必ず適用してください。