本节介绍每种逻辑复制消息的详细格式。这些消息要么由复制槽 SQL 接口返回,要么由 walsender 发送。对于 walsender,它们被封装在复制协议 WAL 消息中,如 第 53.4 节 中所述,并且通常遵循与物理复制相同的消息流。
标识消息为 begin 消息。
事务的最终 LSN。
事务的提交时间戳。该值为自 PostgreSQL epoch(2000-01-01)起以微秒计的数字。
事务的 Xid。
识别消息为逻辑解码消息。
事务的 Xid(仅针对流式事务出现)。该字段在协议版本 2 中可用。
标志;无标志则为 0,逻辑解码消息为事务性则为 1。
逻辑解码消息的 LSN。
逻辑解码消息的前缀。
内容长度。
n
逻辑解码消息的内容。
识别消息为提交消息。
标志;目前未使用。
提交的 LSN。
事务的结束 LSN。
事务的提交时间戳。该值为自 PostgreSQL epoch(2000-01-01)起以微秒计的数字。
识别消息为来源消息。
来源服务器上的提交 LSN。
来源名称。
请注意,单个事务中可能有多个来源消息。
识别消息为关系消息。
事务的 Xid(仅针对流式事务出现)。该字段在协议版本 2 中可用。
关系的 OID。
命名空间(对于 pg_catalog
来说为空)。
关系名称。
关系的复制身份设置(与 pg_class
中的 relreplident
相同)。
列数。
接下来,包含在发布中的每一列都会出现以下消息部分(生成的列除外)
列的标志。目前对于无标志可以是 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。此字段会针对每个关系进行重复。
以下消息(流开始、流停止、流提交和流中止)自协议版本 2 起可用。
识别消息为流开始消息。
事务的 Xid。
值为 1 表示这是此 XID 的第一个流段,值为 0 表示其他任意流段。
识别消息为流停止消息。
将消息标识为流提交消息。
事务的 Xid。
标志;目前未使用。
提交的 LSN。
事务的结束 LSN。
事务的提交时间戳。该值为自 PostgreSQL epoch(2000-01-01)起以微秒计的数字。
将消息标识为流中止消息。
事务的 Xid。
子事务的 XID(对于顶级事务,将与事务的 XID 相同)。
中止的 LSN。此字段自协议版本 4 起可用。
事务的中止时间戳。该值为自 PostgreSQL 历元(2000-01-01)以来的微秒数。此字段自协议版本 4 起可用。
以下消息(开始预备、预备、提交预备、回滚预备、流预备)自协议版本 3 起可用。
将消息标识为预备事务消息的开始。
预备的 LSN。
预备事务的结束 LSN。
事务的预备时间戳。该值为自 PostgreSQL 历元(2000-01-01)以来的微秒数。
事务的 Xid。
预备事务的用户定义 GID。
将消息标识为预备事务消息。
标志;目前未使用。
预备的 LSN。
预备事务的结束 LSN。
事务的预备时间戳。该值为自 PostgreSQL 历元(2000-01-01)以来的微秒数。
事务的 Xid。
预备事务的用户定义 GID。
将消息标识为提交预备事务消息。
标志;目前未使用。
提交预备事务的 LSN。
提交预备事务的结束 LSN。
事务的提交时间戳。该值为自 PostgreSQL epoch(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 值。
或
标识未更改的 TOAST 值(不发送实际值)。
或
将数据标识为文本格式值。
或
将数据标识为二进制格式值。
列值的长度。
n
列的值,可以是二进制格式,也可以是文本格式。(按照前一个格式字节中指定)。n
是上述长度。