2.2.4.8.3. TOAST 化された値
PostgreSQL ではページサイズにハード制限があります。つまり、ca より大きい値。8 KB は TOAST ストレージ を使用して保存する必要があります。これは、TOAST メカニズムを使用して保存され、テーブルのレプリカ ID の一部でない限り、変更されていない値がメッセージに含まれていないため、データベースからのレプリケーションメッセージに影響します。Debezium が不足している値を直接データベースから読み取る安全な方法はありません。これにより競合状態が発生する可能性があります。そのため、Debezium は以下のルールに従って、Toasted の値を処理します。
-
REPLICA IDENTITY FULL
: TOAST 列値を持つテーブルは、他の列として変更イベントのbefore
およびafter
ブロックの一部になります。 -
REPLICA IDENTITY DEFAULT
: データベースからUPDATE
イベントを受信すると、レプリカ ID の一部ではない変更されていない TOAST 列値は、そのイベントの一部になりません。同様に、DELETE
イベントを受信すると、そのような TOAST 列はbefore
ブロックの一部になりません。この場合、Debezium は列値を安全に提供できないため、設定オプション で定義されているプレースホルダー値を返します。これは、asted.value.placeholder
です。
Amazon RDS インスタンスに関連する特定の問題があります。wal2json
プラグインは時間とともに進化し、帯域外から貼り付けられた値を提供するリリースがありました。Amazon は、PostgreSQL のバージョンごとに異なるバージョンのプラグインをサポートします。バージョンからバージョンへのマッピングを取得するには、Amazon の ドキュメント を参照してください。一貫性のある貼り付けられた値の処理には、以下を推奨します。
-
PostgreSQL 10+ インスタンス用の
pgoutput
プラグインの使用 -
slot.stream.params
設定オプションを使用して、古いバージョンのwal2json
プラグインにinclude-unchanged-toast=0
を設定します。