この節では論理レプリケーションのプロトコルについて説明します。
このプロトコルはレプリケーションコマンドSTART_REPLICATION
SLOT
slot_name
LOGICAL
で始まるメッセージフローです。
論理ストリーミングレプリケーションのプロトコルは、物理レプリケーションプロトコルの基本要素の上に構築されています。
論理レプリケーションのSTART_REPLICATION
コマンドは以下のパラメータを受け付けます。
プロトコルのバージョンです。
現在はバージョン1
のみが受け付けられます。
サブスクライブする(変更を受け取る)対象となるパブリケーション名をカンマで区切ったリストです。 個々のパブリケーション名は標準的なオブジェクト名と扱われ、必要に応じて引用符で括ることができます。
個々のプロトコルのメッセージについては以降の副節で説明します。 個々のメッセージについては52.9で説明されています。
トップレベルのプロトコルのメッセージはすべてメッセージタイプのバイトで始まります。 コード内では文字として表現されますが、これは文字符号化のないバイト(符号付き)です。
ストリーミングレプリケーションのプロトコルはメッセージ長を含むため、トップレベルのプロトコルのメッセージはそのヘッダに長さを埋め込む必要がありません。
START_REPLICATION
コマンドと再生進捗のメッセージを除き、すべての情報はバックエンド側からフロントエンド側にのみ流れます。
論理レプリケーションのプロトコルは、個々のトランザクションを一つずつ送信します。 これはつまり、BeginとCommitのメッセージの対の間にある全てのメッセージは同じトランザクションに属するということです。
送信されるすべてのトランザクションにはゼロ個以上のDMLメッセージ(Insert、Update、Delete)が含まれます。 カスケードの設定がされている場合は、Originメッセージを含めることができます。 Originメッセージはトランザクションの起点が別のレプリケーションノードであることを示します。 論理レプリケーションのプロトコルという観点では、レプリケーションノードはほぼ何でも良いため、唯一の識別子はOriginの名前です。 (必要なら)必要に応じてこれを処理するのは下流側の責任です。 Originメッセージは必ずトランザクション内のどのDMLよりも前に送信されます。
すべてのDMLメッセージは任意のリレーションIDを含んでおり、これをRelationメッセージ内のIDと関連付けることができます。 Relationメッセージはあるリレーションのスキーマを記述します。 あるリレーションについてのRelationメッセージは、現在のセッションでそのリレーションについて初めてDMLメッセージを送信する場合、あるいはRelationメッセージが最後に送信された後でリレーションの定義が変更された場合に送信されます。 このプロトコルは、クライアントが必要なだけ多くのリレーションについて、メタデータをキャッシュできることを前提としています。