9.3 9.4 9.5 9.6 10 11 12 13 14 Current(15)
阿里云PostgreSQL 问题报告 纠错本页面

55.9. 逻辑复制消息格式

本节描述了每个逻辑复制消息的详细格式。这些消息要么由复制槽SQL接口返回,要么由walsender发送。 对于walsender,它们被封装在复制协议WAL消息中,如第 55.4 节所述, 并且通常遵循与物理复制相同的消息流程。

开始
Byte1('B')

将消息标识为开始消息。

Int64(XLogRecPtr)

事务的最终LSN。

Int64(时间戳)

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

Int32 (事务ID)

事务的Xid。

消息
Byte1('M')

将消息标识为逻辑解码消息。

Int32 (事务ID)

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int8

标志; 逻辑解码消息是非事务性的时为0,是事务性的时为1。

Int64(XLogRecPtr)

逻辑解码消息的LSN。

字符串

逻辑解码消息的前缀。

Int32

内容的长度。

字节n

逻辑解码消息的内容。

提交
Byte1('C')

标识消息为提交消息。

Int8(0)

标志; 目前未使用。

Int64(XLogRecPtr)

提交的LSN。

Int64(XLogRecPtr)

事务的结束LSN。

Int64(时间戳)

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

起源
Byte1('O')

将消息标识为原始消息。

Int64(XLogRecPtr)

原始服务器上提交的LSN。

字符串

原点的名称。

请注意,在单个事务中可能存在多个Origin消息。

关系
Byte1('R')

标识消息为关系消息。

Int32 (事务ID)

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int32(对象标识符)

关系的OID。

字符串

命名空间(pg_catalog为空字符串)。

字符串

关系名称。

Int8

关系的复制标识设置(与relreplidentpg_class中相同)。

Int16

列数。

接下来,对于出版物中包含的每一列(除了生成的列),会出现以下消息部分:

Int8

列的标志。目前可以是0表示没有标志,或者是1表示将该列标记为键的一部分。

字符串

列的名称。

Int32(对象标识符)

列数据类型的OID。

Int32

列的类型修饰符 (atttypmod)。

类型
Byte1('Y')

将消息标识为类型消息。

Int32 (事务ID)

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int32(对象标识符)

数据类型的OID。

字符串

命名空间(pg_catalog为空字符串)。

字符串

数据类型的名称。

插入
Byte1('I')

标识消息为插入消息。

Int32 (事务ID)

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int32(对象标识符)

与关系消息中ID对应的关系的OID。

Byte1('N')

标识以下TupleData消息为新元组。

TupleData

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

更新
Byte1('U')

标识消息为更新消息。

Int32 (事务ID)

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int32(对象标识符)

与关系消息中ID对应的关系的OID。

Byte1('K')

标识以下TupleData子消息为键。 此字段是可选的,仅在更新更改了属于REPLICA IDENTITY索引的任何列的数据时才存在。

Byte1('O')

标识以下TupleData子消息为旧元组。 此字段是可选的,仅在发生更新的表中REPLICA IDENTITY设置为FULL时才存在。

TupleData

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

Byte1('N')

标识以下TupleData消息为新元组。

TupleData

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

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

删除
Byte1('D')

标识消息为删除消息。

Int32 (事务ID)

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int32(对象标识符)

与关系消息中ID对应的关系的OID。

Byte1('K')

标识以下TupleData子消息为键。 如果发生删除操作的表使用索引作为REPLICA IDENTITY,则存在此字段。

Byte1('O')

标识以下TupleData消息为旧元组。 如果发生删除操作的表的REPLICA IDENTITY设置为FULL,则存在此字段。

TupleData

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

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

截断
Byte1('T')

将消息标识为截断消息。

Int32 (事务ID)

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int32

关系数量

Int8

选项位用于TRUNCATE命令: 1表示CASCADE,2表示RESTART IDENTITY

Int32(对象标识符)

与关系消息中ID对应的关系的OID。该字段对每个关系都重复。

以下消息(Stream Start,Stream Stop,Stream Commit和Stream Abort)自协议版本2起可用。

流开始
Byte1('S')

标识消息为流开始消息。

Int32 (事务ID)

事务的Xid。

Int8

值为1表示这是该XID的第一个流段,值为0表示其他任何流段。

流停止
Byte1('E')

标识消息为流停止消息。

流提交
Byte1('c')

将消息标识为流提交消息。

Int32 (事务ID)

事务的Xid。

Int8(0)

标志; 目前未使用。

Int64(XLogRecPtr)

提交的LSN。

Int64(XLogRecPtr)

事务的结束LSN。

Int64(时间戳)

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

流中止
Byte1('A')

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

Int32 (事务ID)

事务的Xid。

Int32 (事务ID)

子事务的Xid(对于顶层事务,将与事务的xid相同)。

以下消息(Begin Prepare,Prepare,Commit Prepared,Rollback Prepared,Stream Prepare)自协议版本3起可用。

开始准备
Byte1('b')

标识消息为准备事务消息的开始。

Int64(XLogRecPtr)

准备的LSN。

Int64(XLogRecPtr)

准备事务的结束LSN。

Int64(时间戳)

准备事务的时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。

Int32 (事务ID)

事务的Xid。

字符串

准备事务的用户定义的GID。

准备
Byte1('P')

标识消息为预处理事务消息。

Int8(0)

标志; 目前未使用。

Int64(XLogRecPtr)

准备的LSN。

Int64(XLogRecPtr)

准备事务的结束LSN。

Int64(时间戳)

准备事务的时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。

Int32 (事务ID)

事务的Xid。

字符串

准备事务的用户定义的GID。

提交准备
Byte1('K')

标识消息为准备事务提交消息。

Int8(0)

标志; 目前未使用。

Int64(XLogRecPtr)

准备事务提交的LSN。

Int64(XLogRecPtr)

准备事务提交的结束LSN。

Int64(时间戳)

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

Int32 (事务ID)

事务的Xid。

字符串

准备事务的用户定义的GID。

准备回滚
Byte1('r')

标识消息为准备事务回滚消息。

Int8(0)

标志; 目前未使用。

Int64(XLogRecPtr)

准备事务的结束LSN。

Int64(XLogRecPtr)

回滚准备事务的结束LSN。

Int64(时间戳)

准备事务的时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。

Int64(时间戳)

事务的回滚时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。

Int32 (事务ID)

事务的Xid。

字符串

准备事务的用户定义的GID。

流准备
Byte1('p')

标识消息为准备好的流事务消息。

Int8(0)

标志; 目前未使用。

Int64(XLogRecPtr)

准备的LSN。

Int64(XLogRecPtr)

准备事务的结束LSN。

Int64(时间戳)

准备事务的时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。

Int32 (事务ID)

事务的Xid。

字符串

准备事务的用户定义的GID。

以上消息共享以下消息部分。

TupleData
Int16

列数。

接下来,对于每一列(除了生成的列),会出现以下子消息之一:

Byte1('n')

将数据标识为NULL值。

或者

Byte1('u')

将TOASTed值标识为未更改的值(实际值未发送)。

或者

Byte1('t')

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

或者

Byte1('b')

将数据标识为二进制格式化值。

Int32

列值的长度。

Byten

列的值,以二进制或文本格式呈现。 (如前述格式字节中指定)。 n是上述长度。