本节描述了每个逻辑复制消息的详细格式。这些消息要么由复制槽SQL接口返回,要么由walsender发送。 对于walsender,它们被封装在复制协议WAL消息中,如第 55.4 节所述, 并且通常遵循与物理复制相同的消息流程。
将消息标识为开始消息。
事务的最终LSN。
事务的提交时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。
事务的Xid。
将消息标识为逻辑解码消息。
事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。
标志; 逻辑解码消息是非事务性的时为0,是事务性的时为1。
逻辑解码消息的LSN。
逻辑解码消息的前缀。
内容的长度。
n
逻辑解码消息的内容。
标识消息为提交消息。
标志; 目前未使用。
提交的LSN。
事务的结束LSN。
事务的提交时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。
将消息标识为原始消息。
原始服务器上提交的LSN。
原点的名称。
请注意,在单个事务中可能存在多个Origin消息。
标识消息为关系消息。
事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。
关系的OID。
命名空间(pg_catalog
为空字符串)。
关系名称。
关系的复制标识设置(与relreplident
在pg_class
中相同)。
列数。
接下来,对于出版物中包含的每一列(除了生成的列),会出现以下消息部分:
列的标志。目前可以是0表示没有标志,或者是1表示将该列标记为键的一部分。
列的名称。
列数据类型的OID。
列的类型修饰符 (atttypmod
)。
将消息标识为类型消息。
事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。
数据类型的OID。
命名空间(pg_catalog
为空字符串)。
数据类型的名称。
标识消息为插入消息。
事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。
与关系消息中ID对应的关系的OID。
标识以下TupleData消息为新元组。
TupleData消息部分,表示新元组的内容。
标识消息为更新消息。
事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。
与关系消息中ID对应的关系的OID。
标识以下TupleData子消息为键。 此字段是可选的,仅在更新更改了属于REPLICA IDENTITY索引的任何列的数据时才存在。
标识以下TupleData子消息为旧元组。 此字段是可选的,仅在发生更新的表中REPLICA IDENTITY设置为FULL时才存在。
TupleData消息部分表示旧元组或主键的内容。仅在先前的'O'或'K'部分存在时才存在。
标识以下TupleData消息为新元组。
TupleData消息部分表示新元组的内容。
更新消息可能包含一个'K'消息部分,也可能包含一个'O'消息部分,或者两者都不包含,但绝不会同时包含两者。
标识消息为删除消息。
事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。
与关系消息中ID对应的关系的OID。
标识以下TupleData子消息为键。 如果发生删除操作的表使用索引作为REPLICA IDENTITY,则存在此字段。
标识以下TupleData消息为旧元组。 如果发生删除操作的表的REPLICA IDENTITY设置为FULL,则存在此字段。
TupleData消息部分,表示旧元组或主键的内容,取决于前一个字段。
删除消息可能包含一个'K'消息部分或一个'O'消息部分,但绝不会同时包含两者。
将消息标识为截断消息。
事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。
关系数量
选项位用于TRUNCATE
命令:
1表示CASCADE
,2表示RESTART IDENTITY
与关系消息中ID对应的关系的OID。该字段对每个关系都重复。
以下消息(Stream Start,Stream Stop,Stream Commit和Stream Abort)自协议版本2起可用。
标识消息为流开始消息。
事务的Xid。
值为1表示这是该XID的第一个流段,值为0表示其他任何流段。
标识消息为流停止消息。
将消息标识为流提交消息。
事务的Xid。
标志; 目前未使用。
提交的LSN。
事务的结束LSN。
事务的提交时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。
将消息标识为流中止消息。
事务的Xid。
子事务的Xid(对于顶层事务,将与事务的xid相同)。
以下消息(Begin Prepare,Prepare,Commit Prepared,Rollback Prepared,Stream Prepare)自协议版本3起可用。
标识消息为准备事务消息的开始。
准备的LSN。
准备事务的结束LSN。
准备事务的时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。
事务的Xid。
准备事务的用户定义的GID。
标识消息为预处理事务消息。
标志; 目前未使用。
准备的LSN。
准备事务的结束LSN。
准备事务的时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。
事务的Xid。
准备事务的用户定义的GID。
标识消息为准备事务提交消息。
标志; 目前未使用。
准备事务提交的LSN。
准备事务提交的结束LSN。
事务的提交时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。
事务的Xid。
准备事务的用户定义的GID。
标识消息为准备事务回滚消息。
标志; 目前未使用。
准备事务的结束LSN。
回滚准备事务的结束LSN。
准备事务的时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。
事务的回滚时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。
事务的Xid。
准备事务的用户定义的GID。
标识消息为准备好的流事务消息。
标志; 目前未使用。
准备的LSN。
准备事务的结束LSN。
准备事务的时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。
事务的Xid。
准备事务的用户定义的GID。
以上消息共享以下消息部分。
列数。
接下来,对于每一列(除了生成的列),会出现以下子消息之一:
将数据标识为NULL值。
或者
将TOASTed值标识为未更改的值(实际值未发送)。
或者
将数据标识为文本格式化值。
或者
将数据标识为二进制格式化值。
列值的长度。
n
列的值,以二进制或文本格式呈现。
(如前述格式字节中指定)。
n
是上述长度。