9.3 9.4 9.5 9.6 10 11 12 13 14 15 Current(16) 17
问题报告 纠错本页面
53.9. 逻辑复制消息格式
上一页 上一级 第 53 章 前端/后端协议起始页 下一页

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

标识:逻辑解码消息的flags。它可以是0表示没有flags,或者1表示逻辑解码消息是事务性的。

Int64

逻辑解码消息的LSN。

String

逻辑解码消息的前缀。

Int32

内容的长度。

Byten

逻辑解码消息的内容。

Commit
Byte1('C')

标识该消息是一个提交消息。

Int8

标志,当前未使用(必须为0)。

Int64

提交的LSN。

Int64

该事务的结束LSN。

Int64

该事务的提交时间戳。该值是自PostgreSQL纪元(2000年01月01日)以来的微秒数。

Origin
Byte1('O')

标识该消息是一个源头消息。

Int64

源头服务器上的提交LSN。

String

源头的名称。

注意在一个单一事务中可能有多个Origin消息。

Relation
Byte1('R')

标识该消息是一个关系消息。

Int32

事务的Xid(仅出现在流事务中)。此字段在协议版本2及以后可用。

Int32

关系的ID。

String

名字空间(pg_catalog是空字符串)。

String

关系名。

Int8

该关系的副本标识设置(和pg_class中的relreplident相同)。

Int16

列数。

接下来,会为每一列出现下面的消息部分(生成的列除外):

Int8

该列的标志。当前可以是0(无标志)或者1(标记该列为键的一部分)。

String

列的名称。

Int32

列的数据类型的ID。

Int32

列的类型修饰符(atttypmod)。

Type
Byte1('Y')

标识该消息是一个类型消息。

Int32

事务的Xid(仅出现在流事务中)。此字段在协议版本2及以后可用。

Int32

数据类型的ID。

String

名字空间(pg_catalog的是空字符串)。

String

数据类型的名称。

Insert
Byte1('I')

标识该消息是一个插入消息。

Int32

事务的Xid(仅出现在流事务中)。此字段在协议版本2及以后可用。

Int32

对应于关系消息中的ID的关系的ID。

Byte1('N')

标识接下来的TupleData消息是一个新元组。

TupleData

TupleData消息部分表示新元组的内容。

Update
Byte1('U')

标识该消息是一个更新消息。

Int32

事务的Xid(仅出现在流事务中)。此字段在协议版本2及以后可用。

Int32

对应于关系消息中的ID的关系的ID。

Byte1('K')

标识接下来的TupleData子消息为一个键。这个字段是可选的并且仅当任意列中被更新更改的数据是REPLICA IDENTITY索引的一部分时才存在。

Byte1('O')

标识接下来的TupleData子消息为一个旧元组。这个字段是可选的并且仅当发生更新的表的REPLICA IDENTITY被设置为FULL时才存在。

TupleData

TupleData消息部分表示旧元组或主键的内容。仅当之前的'0'或'K'部分存在时才存在。

Byte1('N')

标识接下来的TupleData消息是一个新元组。

TupleData

TupleData消息部分表示一个新元组的内容。

Update消息可能包含一个'K'消息部分或者一个'O'消息部分,或者两者都不包含,但是绝不会同时包含两者。

Delete
Byte1('D')

标识该消息是一个删除消息。

Int32

事务的Xid(仅出现在流事务中)。此字段在协议版本2及以后可用。

Int32

对应于关系消息中的ID的关系的ID。

Byte1('K')

标识接下来的TupleData子消息是一个键。如果发生删除的表正好用一个索引作为REPLICA IDENTITY,那么就会存在这个字段。

Byte1('O')

标识接下来的TupleData子消息为一个旧元组。这个字段是可选的并且仅当发生删除的表的REPLICA IDENTITY被设置为FULL时才存在。

TupleData

TupleData消息部分表示旧元组或主键的内容,取决于前面的字段。

Delete消息可能包含一个'K'消息部分或者一个'O'消息部分,或者两者都不包含,但是绝不会同时包含两者。

Truncate
Byte1('T')

标识该消息是一个截断消息。

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年1月1日)以来的微秒数。

Stream Abort
Byte1('A')

将消息标识为流中止消息。

Int32

事务的 Xid。

Int32

子事务的Xid(对于顶级事务将与事务的Xid相同)。

下面的消息部分由上面的消息共享。

TupleData
Int16

列数。

接下来,为每一列会有下列子消息之一出现(生成的列除外):

Byte1('n')

标识该数据为NULL值。

或者

Byte1('u')

标识未更改的被TOAST过的值(实际值没有被发送)。

或者

Byte1('t')

标识数据为文本格式化的值。

Int32

列值的长度。

Byten

该列的值,以二进制或文本格式给出。(如前面的格式字节中所指定的)。n是上面的长度。

上一页 上一级 下一页
53.8. 错误和通知消息域 起始页 53.10. 自协议2.0以来的变化总结

AltStyle によって変換されたページ (->オリジナル) /