第 46章ロジカルデコーディング

目次
46.1. ロジカルデコーディングの例
46.2. ロジカルデコーディングのコンセプト
46.2.1. ロジカルデコーディング
46.2.2. レプリケーションスロット
46.2.3. 出力プラグイン
46.2.4. スナップショットのエキスポート
46.3. ストリームレプリケーションプロトコルインターフェイス
46.4. ロジカルデコーディングSQLインタフェース
46.5. ロジカルデコーディング関連のシステムカタログ
46.6. ロジカルデコーディングの出力プラグイン
46.6.1. 初期化関数
46.6.2. 機能
46.6.3. 出力モード
46.6.4. 出力プラグインコールバック
46.6.5. 出力生成関数
46.7. ロジカルデコーディング出力ライター
46.8. ロジカルデコーディングにおける同期レプリケーションのサポート

PostgreSQLは、SQLによって実行された更新結果を外部のコンシューマにストリーミングする基盤を提供しています。

更新結果はロジカルレプリケーションスロット(logical replication slots)で識別され、ストリームに送出されます。 各々のストリームは、厳密に一度だけそれぞれの更新を送出します。

ストリームに送出される更新データのフォーマットは、使用するプラグインで決まります。 サンプルプラグインがPostgreSQLの配布物に含まれています。 追加のプラグインを書くことにより、PostgreSQLのコア部分のコードを一切変更することなく、利用可能なフォーマットの選択肢を増やすことができます。 すべてのプラグインから、 INSERTによって作成された個々の新しい行と、UPDATEによって作成された新しい個々の行のバージョンにアクセスできます。 UPDATEDELETEによって古いバージョンの行へのアクセスが可能かどうかは、 レプリカエンティティ(replica entity)の設定によって決まります(REPLICA IDENTITY参照)。

変更データの消費は、ストリーミングレプリケーションのプロトコル(項49.3項46.3を参照)を使うか、SQL関数(項46.4)を使って行います。 また、コア部分に手を入れなくても、レプリケーションスロットの出力を消費する別の方法を実装することもできます (項46.7参照)。