★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

53.5. 論理ストリーミングレプリケーションのプロトコル

この節では論理レプリケーションのプロトコルについて説明します。 このプロトコルはレプリケーションコマンドSTART_REPLICATION SLOT slot_name LOGICALで始まるメッセージフローです。

論理ストリーミングレプリケーションのプロトコルは、物理レプリケーションプロトコルの基本要素の上に構築されています。

53.5.1. 論理ストリーミングレプリケーションのパラメータ

論理レプリケーションのSTART_REPLICATIONコマンドは以下のパラメータを受け付けます。

proto_version

プロトコルのバージョンです。 現在はバージョン1のみが受け付けられます。

publication_names

サブスクライブする(変更を受け取る)対象となるパブリケーション名をカンマで区切ったリストです。 個々のパブリケーション名は標準的なオブジェクト名と扱われ、必要に応じて引用符で括ることができます。

53.5.2. 論理レプリケーションのプロトコルのメッセージ

個々のプロトコルのメッセージについては以降の副節で説明します。 個々のメッセージについては53.9で説明されています。

トップレベルのプロトコルのメッセージはすべてメッセージタイプのバイトで始まります。 コード内では文字として表現されますが、これは文字符号化のないバイト(符号付き)です。

ストリーミングレプリケーションのプロトコルはメッセージ長を含むため、トップレベルのプロトコルのメッセージはそのヘッダに長さを埋め込む必要がありません。

53.5.3. 論理レプリケーションのプロトコルのメッセージフロー

START_REPLICATIONコマンドと再生進捗のメッセージを除き、すべての情報はバックエンド側からフロントエンド側にのみ流れます。

論理レプリケーションのプロトコルは、個々のトランザクションを一つずつ送信します。 これはつまり、BeginとCommitのメッセージの対の間にある全てのメッセージは同じトランザクションに属するということです。

送信されるすべてのトランザクションにはゼロ個以上のDMLメッセージ(Insert、Update、Delete)が含まれます。 カスケードの設定がされている場合は、Originメッセージを含めることができます。 Originメッセージはトランザクションの起点が別のレプリケーションノードであることを示します。 論理レプリケーションのプロトコルという観点では、レプリケーションノードはほぼ何でも良いため、唯一の識別子はOriginの名前です。 (必要なら)必要に応じてこれを処理するのは下流側の責任です。 Originメッセージは必ずトランザクション内のどのDMLよりも前に送信されます。

すべてのDMLメッセージは任意のリレーションIDを含んでおり、これをRelationメッセージ内のIDと関連付けることができます。 Relationメッセージはあるリレーションのスキーマを記述します。 あるリレーションについてのRelationメッセージは、現在のセッションでそのリレーションについて初めてDMLメッセージを送信する場合、あるいはRelationメッセージが最後に送信された後でリレーションの定義が変更された場合に送信されます。 このプロトコルは、クライアントが必要なだけ多くのリレーションについて、メタデータをキャッシュできることを前提としています。