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を設定します。