# 53.9.逻辑复制消息格式
本节介绍每个逻辑复制消息的详细格式。这些消息要么由复制槽SQL接口返回,要么由发送方发送。对于walsender,它们被封装在复制协议WAL消息中,如中所述第53.4节并且通常遵循与物理复制相同的消息流。
开始
字节1('B')
将消息标识为开始消息。
Int64
事务的最终LSN。
Int64
提交事务的时间戳。该值以自PostgreSQL时代(2000-01-01)以来的微秒数表示。
Int32
交易的Xid。
消息
字节1('M')
将消息标识为逻辑解码消息。
Int32
事务的Xid(仅适用于流式事务)。此字段自协议版本2起可用。
Int8
旗帜;0表示无标志,如果逻辑解码消息是事务性的,则为1.
Int64
逻辑解码消息的LSN。
一串
逻辑解码消息的前缀。
Int32
内容的长度。
字节*n
*
逻辑解码消息的内容。
犯罪
字节1('C')
将消息标识为提交消息。
Int8
旗帜;当前未使用(必须为0)。
Int64
提交的LSN。
Int64
事务的结束LSN。
Int64
提交事务的时间戳。该值以自PostgreSQL时代(2000-01-01)以来的微秒数表示。
起源
字节1('O')
将邮件标识为原始邮件。
Int64
源服务器上提交的LSN。
一串
原产地名称。
请注意,在一个事务中可以有多个源消息。
关系
字节1('R')
将消息标识为关系消息。
Int32
事务的Xid(仅适用于流式事务)。此字段自协议版本2起可用。
Int32
亲属身份证。
一串
命名空间(用于pg_目录
).
一串
关系名。
Int8
关系的副本标识设置(与重新识别
在里面pg_类
).
Int16
列数。
接下来,将为每列(生成的列除外)显示以下消息部分:
Int8
该列的标志。当前可以为0表示无标志,也可以为1表示将列标记为键的一部分。
一串
列的名称。
Int32
列的数据类型的ID。
Int32
列的类型修饰符(atttypmod
).
类型
字节1('Y')
将消息标识为消息类型。
Int32
事务的Xid(仅适用于流式事务)。此字段自协议版本2起可用。
Int32
数据类型的ID。
一串
命名空间(用于pg_目录
).
一串
数据类型的名称。
插入
字节1(‘I’)
将消息标识为插入消息。
Int32
事务的Xid(仅适用于流式事务)。此字段自协议版本2起可用。
Int32
与关系消息中的ID对应的关系的ID。
字节1('N')
将以下TupleData消息标识为新的元组。
图普莱达
表示新元组内容的TupleData消息部分。
使现代化
字节1('U')
将消息标识为更新消息。
Int32
事务的Xid(仅适用于流式事务)。此字段自协议版本2起可用。
Int32
与关系消息中的ID对应的关系的ID。
字节1('K')
将以下TupleData子消息标识为密钥。此字段是可选的,仅当更新更改了属于副本标识索引的任何列中的数据时,此字段才存在。
字节1('O')
将以下TupleData子消息标识为旧元组。此字段是可选的,仅当发生更新的表的副本标识设置为FULL时才存在。
图普莱达
表示旧元组或主键内容的TupleData消息部分。仅当前面的“O”或“K”部分存在时才出现。
字节1('N')
将以下TupleData消息标识为新的元组。
图普莱达
表示新元组内容的TupleData消息部分。
更新消息可能包含“K”消息部分或“O”消息部分,或者两者都不包含,但决不能同时包含这两个部分。
删去
字节1('D')
将邮件标识为删除邮件。
Int32
事务的Xid(仅适用于流式事务)。此字段自协议版本2起可用。
Int32
与关系消息中的ID对应的关系的ID。
字节1('K')
将以下TupleData子消息标识为密钥。如果发生删除的表使用索引作为副本标识,则此字段存在。
字节1('O')
将以下TupleData消息标识为旧元组。如果发生删除的表的副本标识设置为FULL,则此字段存在。
图普莱达
表示旧元组或主键内容的TupleData消息部分,具体取决于前面的字段。
删除消息可以包含“K”消息部分或“O”消息部分,但不能同时包含这两个部分。
截断
字节1('T')
将消息标识为截断消息。
Int32
事务的Xid(仅适用于流式事务)。此字段自协议版本2起可用。
Int32
关系数
Int8
选项位截断
:1大量
,2人重新启动标识
Int32
与关系消息中的ID对应的关系的ID。每个关系都会重复此字段。
以下消息(流开始、流停止、流提交和流中止)自协议版本2起可用。
流启动
字节1('S')
将消息标识为流启动消息。
Int32
交易的Xid。
Int8
值1表示这是该XID的第一个流段,0表示任何其他流段。
溪流停止
字节1('E')
将消息标识为流停止消息。
流提交
字节1('c')
将消息标识为流提交消息。
Int32
交易的Xid。
Int8
旗帜;当前未使用(必须为0)。
Int64
提交的LSN。
Int64
事务的结束LSN。
Int64
提交事务的时间戳。该值以自PostgreSQL时代(2000-01-01)以来的微秒数表示。
流中止
字节1('A')
将消息标识为流中止消息。
Int32
交易的Xid。
Int32
子事务的Xid(对于顶级事务,将与事务的Xid相同)。
以上消息共享以下消息部分。
图普莱达
Int16
列数。
接下来,将为每列(生成的列除外)显示以下子消息之一:
字节1('n')
将数据标识为空值。
或
字节1('u')
标识未更改的烘烤值(不发送实际值)。
或
字节1('t')
将数据标识为文本格式的值。
或
字节1('b')
将数据标识为二进制格式的值。
Int32
列值的长度。
字节*n
*
列的值,以二进制或文本格式显示。(如前一个字节格式中所述)。*n
*是上面的长度。