本節では論理レプリケーションの各メッセージの書式の詳細について説明します。 これらのメッセージはレプリケーションスロットのSQLインタフェースから返されるか、あるいはwalsenderから送信されるかのいずれかです。 walsenderの場合は、52.4で説明されているようにレプリケーションプロトコルのWALメッセージ内でカプセル化され、通常は物理レプリケーションと同じメッセージフローに従います。
メッセージが開始メッセージであることを識別します。
トランザクションの最後のLSNです。
トランザクションのコミット時刻です。 その値はPostgreSQLのエポック(2000-01-01)からのマイクロ秒数です。
トランザクションのXIDです。
メッセージがCommitメッセージであることを識別します。
フラグですが現在は未使用です(0でなければなりません)。
コミットのLSNです。
トランザクションの終了LSNです。
トランザクションのコミット時刻です。 その値はPostgreSQLのエポック(2000-01-01)からのマイクロ秒数です。
メッセージがOriginメッセージであることを識別します。
Originサーバ上のコミットのLSNです。
Originの名前です。
一つのトランザクション内で複数のOriginメッセージがあり得ることに注意してください。
メッセージがRelationメッセージであることを識別します。
リレーションのIDです。
名前空間(pg_catalog
の場合は空文字列)。
リレーション名。
リレーションのレプリカ識別子の設定(pg_class
のrelreplident
と同じ)。
列数。
次に、各列について以下のメッセージ部分があります。(生成列を除く)
列のフラグ。 現在は、フラグがないことを示す0か、列がキーの一部であることを示す1のいずれかにできます。
列名。
列のデータ型のID。
列の型修飾子(atttypmod
)。
メッセージがTypeメッセージであることを識別します。
データ型のID。
名前空間(pg_catalog
の場合は空文字列)。
データ型の名前。
メッセージがInsertメッセージであることを識別します。
Relationメッセージ中のIDに対応するリレーションのID。
以下のTupleDataメッセージが新しいタプルであることを識別します。
新しいタプルの内容を表すTupleDataメッセージ部分です。
メッセージがUpdateメッセージであることを識別します。
Relationメッセージ中のIDに対応するリレーションのID。
これに続くTupleData副メッセージがキーであることを識別します。 このフィールドはオプションで、UPDATEがREPLICA IDENTITYインデックスの一部となっている列のどれかを変更したときにのみ存在します。
これに続くTupleData副メッセージが古いタプルであることを識別します。 このフィールドはオプションで、UPDATEが発生したテーブルでREPLICA IENTITYがFULLに設定されている場合にのみ存在します。
古いタプルまたは主キーの内容を表すTupleDataメッセージ部分です。 この前に'O'または'K'の部分が存在するときにのみ存在します。
これに続くTupleDataメッセージが新しいタプルであることを識別します。
新しいタプルの内容を表すTupleDataメッセージ部分です。
Updateメッセージは'K'メッセージ部分と'O'メッセージ部分のいずれかを含むか、どちらも含まないかであり、その両方を含むことはできません。
メッセージがDeleteメッセージであることを識別します。
Relationメッセージ中のIDに対応するリレーションのID。
これに続くTupleData副メッセージがキーであることを識別します。 このフィールドはDELETEが発生したテーブルがインデックスをREPLICA IDENTITYとして使用している場合にのみ存在します。
これに続くTupleDataメッセージが古いタプルであることを識別します。 このフィールドはDELETEが発生したテーブルでREPLICA IDENTITYがFULLに設定されている場合にのみ存在します。
直前のフィールドに従って、古いタプルまたは主キーの内容を表すTupleDataメッセージ部分です。
Deleteメッセージは'K'メッセージ部分と'O'メッセージ部分のいずれかを含みますが、両方を含むことはできません。
メッセージをTruncateメッセージと識別します。
リレーション数
TRUNCATE
に対するオプションビット。1はCASCADE
、2はRESTART IDENTITY
リレーションメッセージのIDに一致するリレーションのID。 このフィールドは各リレーション毎に繰り返されます。
以下のメッセージ部分は上記のメッセージに共通です。
列数。
次に各列を表す以下の副メッセージの一つがあります。(生成列を除く)
データがNULL値であることを識別します。
または、
TOAST値が変更されないことを識別します(実際の値は送信されません)。
または
データがテキスト形式の値であることを識別します。
列値の長さ。
n
テキスト形式での列の値。
(将来のリリースでは他の形式もサポートするかもしれません。)
n
は上記の長さです。