# 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*是上面的长度。