他のバージョンの文書 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.9. 論理レプリケーションのメッセージ書式

本節では論理レプリケーションの各メッセージの書式の詳細について説明します。 これらのメッセージはレプリケーションスロットのSQLインタフェースから返されるか、あるいはwalsenderから送信されるかのいずれかです。 walsenderの場合は、53.4で説明されているようにレプリケーションプロトコルのWALメッセージ内でカプセル化され、通常は物理レプリケーションと同じメッセージフローに従います。

Begin

Byte1('B')

メッセージが開始メッセージであることを識別します。

Int64

トランザクションの最後のLSNです。

Int64

トランザクションのコミット時刻です。 その値はPostgreSQLのエポック(2000-01-01)からのマイクロ秒数です。

Int32

トランザクションのXIDです。

Message

Byte1('M')

ロジカルデコーディングメッセージであることを識別します。

Int32

トランザクションのxid(ストリームトランザクションのためにのみ存在します)。 このフィールドはプロトコルバージョン2以降で利用可能です。

Int8

フラグ。0はフラグなし、ロジカルデコーディングメッセージがトランザクションであれば1です。

Int64

ロジカルデコーディングメッセージのLSN。

String

ロジカルデコーディングメッセージの接頭辞。

Int32

内容の長さ。

Byten

ロジカルデコーディングメッセージの内容。

Commit

Byte1('C')

メッセージがCommitメッセージであることを識別します。

Int8

フラグですが現在は未使用です(0でなければなりません)。

Int64

コミットのLSNです。

Int64

トランザクションの終了LSNです。

Int64

トランザクションのコミット時刻です。 その値はPostgreSQLのエポック(2000-01-01)からのマイクロ秒数です。

Origin

Byte1('O')

メッセージがOriginメッセージであることを識別します。

Int64

Originサーバ上のコミットのLSNです。

String

Originの名前です。

一つのトランザクション内で複数のOriginメッセージがあり得ることに注意してください。

Relation

Byte1('R')

メッセージがRelationメッセージであることを識別します。

Int32

トランザクションのxid(ストリームトランザクションのためにのみ存在します)。 このフィールドはプロトコルバージョン2以降で利用可能です。

Int32

リレーションのIDです。

String

名前空間(pg_catalogの場合は空文字列)。

String

リレーション名。

Int8

リレーションのレプリカ識別子の設定(pg_classrelreplidentと同じ)。

Int16

列数。

次に、各列について以下のメッセージ部分があります。(生成列を除く)

Int8

列のフラグ。 現在は、フラグがないことを示す0か、列がキーの一部であることを示す1のいずれかにできます。

String

列名。

Int32

列のデータ型のID。

Int32

列の型修飾子(atttypmod)。

Type

Byte1('Y')

メッセージがTypeメッセージであることを識別します。

Int32

トランザクションのxid(ストリームトランザクションのためにのみ存在します)。 このフィールドはプロトコルバージョン2以降で利用可能です。

Int32

データ型のID。

String

名前空間(pg_catalogの場合は空文字列)。

String

データ型の名前。

Insert

Byte1('I')

メッセージがInsertメッセージであることを識別します。

Int32

トランザクションのxid(ストリームトランザクションのためにのみ存在します)。 このフィールドはプロトコルバージョン2以降で利用可能です。

Int32

Relationメッセージ中のIDに対応するリレーションのID。

Byte1('N')

以下のTupleDataメッセージが新しいタプルであることを識別します。

TupleData

新しいタプルの内容を表すTupleDataメッセージ部分です。

Update

Byte1('U')

メッセージがUpdateメッセージであることを識別します。

Int32

トランザクションのxid(ストリームトランザクションのためにのみ存在します)。 このフィールドはプロトコルバージョン2以降で利用可能です。

Int32

Relationメッセージ中のIDに対応するリレーションのID。

Byte1('K')

これに続くTupleData副メッセージがキーであることを識別します。 このフィールドはオプションで、UPDATEがREPLICA IDENTITYインデックスの一部となっている列のどれかを変更したときにのみ存在します。

Byte1('O')

これに続くTupleData副メッセージが古いタプルであることを識別します。 このフィールドはオプションで、UPDATEが発生したテーブルでREPLICA IDENTITYがFULLに設定されている場合にのみ存在します。

TupleData

古いタプルまたは主キーの内容を表すTupleDataメッセージ部分です。 この前に'O'または'K'の部分が存在するときにのみ存在します。

Byte1('N')

これに続くTupleDataメッセージが新しいタプルであることを識別します。

TupleData

新しいタプルの内容を表すTupleDataメッセージ部分です。

Updateメッセージは'K'メッセージ部分と'O'メッセージ部分のいずれかを含むか、どちらも含まないかであり、その両方を含むことはできません。

Delete

Byte1('D')

メッセージがDeleteメッセージであることを識別します。

Int32

トランザクションのxid(ストリームトランザクションのためにのみ存在します)。 このフィールドはプロトコルバージョン2以降で利用可能です。

Int32

Relationメッセージ中のIDに対応するリレーションのID。

Byte1('K')

これに続くTupleData副メッセージがキーであることを識別します。 このフィールドはDELETEが発生したテーブルがインデックスをREPLICA IDENTITYとして使用している場合にのみ存在します。

Byte1('O')

これに続くTupleDataメッセージが古いタプルであることを識別します。 このフィールドはDELETEが発生したテーブルでREPLICA IDENTITYがFULLに設定されている場合にのみ存在します。

TupleData

直前のフィールドに従って、古いタプルまたは主キーの内容を表すTupleDataメッセージ部分です。

Deleteメッセージは'K'メッセージ部分と'O'メッセージ部分のいずれかを含みますが、両方を含むことはできません。

Truncate

Byte1('T')

メッセージをTruncateメッセージと識別します。

Int32

トランザクションのxid(ストリームトランザクションのためにのみ存在します)。 このフィールドはプロトコルバージョン2以降で利用可能です。

Int32

リレーション数

Int8

TRUNCATEに対するオプションビット。1はCASCADE、2はRESTART IDENTITY

Int32

リレーションメッセージのIDに一致するリレーションのID。 このフィールドは各リレーション毎に繰り返されます。

次のメッセージ(Stream Start、Stream Stop、Stream Commit、Stream Abort)はプロトコルバージョン2以降で利用可能です。

Stream Start

Byte1('S')

メッセージがストリーム開始メッセージであることを識別します。

Int32

トランザクションのxid。

Int8

値が1ならこのXIDの最初のストリームセグメントであることを、0なら他のストリームセグメントであることを識別します。

Stream Stop

Byte1('E')

メッセージがストリーム停止メッセージであることを識別します。

Stream Commit

Byte1('c')

メッセージがストリームコミットメッセージであることを識別します。

Int32

トランザクションのxid。

Int8

フラグ。今の所未使用です(0でなければなりません)。

Int64

コミットのLSN。

Int64

トランザクションの終了LSN。

Int64

トランザクションのコミット時刻です。 値はPostgreSQLエポック(2000-01-01)からのマイクロ秒数です。

Stream Abort

Byte1('A')

メッセージがストリームアボートメッセージであることを識別します。

Int32

トランザクションのxid。

Int32

サブトラクションxid(トップレベルのトランザクションのxidと同じものになるでしょう)。

以下のメッセージ部分は上記のメッセージに共通です。

TupleData

Int16

列数。

次に各列を表す以下の副メッセージの一つがあります。(生成列を除く)

Byte1('n')

データがNULL値であることを識別します。

または、

Byte1('u')

TOAST値が変更されないことを識別します(実際の値は送信されません)。

または

Byte1('t')

データがテキスト形式の値であることを識別します。

または、

Byte1('b')

データがバイナリフォーマット値であることを識別します。

Int32

列値の長さ。

Byten

テキスト形式あるいはバイナリ形式での列の値。 (先行するフォーマットバイトで指定されます。) nは上記の長さです。