Redrock Postgres 搜索 英文
版本: 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

53.9。逻辑复制消息格式 #

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

Begin #
Byte1('B')

标识消息为 begin 消息。

Int64 (XLogRecPtr)

事务的最终 LSN。

Int64 (TimestampTz)

事务的提交时间戳。该值为自 PostgreSQL epoch(2000-01-01)起以微秒计的数字。

Int32 (TransactionId)

事务的 Xid。

消息 #
Byte1('M')

识别消息为逻辑解码消息。

Int32 (TransactionId)

事务的 Xid(仅针对流式事务出现)。该字段在协议版本 2 中可用。

Int8

标志;无标志则为 0,逻辑解码消息为事务性则为 1。

Int64 (XLogRecPtr)

逻辑解码消息的 LSN。

字符串

逻辑解码消息的前缀。

Int32

内容长度。

Byten

逻辑解码消息的内容。

提交 #
Byte1('C')

识别消息为提交消息。

Int8(0)

标志;目前未使用。

Int64 (XLogRecPtr)

提交的 LSN。

Int64 (XLogRecPtr)

事务的结束 LSN。

Int64 (TimestampTz)

事务的提交时间戳。该值为自 PostgreSQL epoch(2000-01-01)起以微秒计的数字。

来源 #
Byte1('O')

识别消息为来源消息。

Int64 (XLogRecPtr)

来源服务器上的提交 LSN。

字符串

来源名称。

请注意,单个事务中可能有多个来源消息。

关系 #
Byte1('R')

识别消息为关系消息。

Int32 (TransactionId)

事务的 Xid(仅针对流式事务出现)。该字段在协议版本 2 中可用。

Int32 (Oid)

关系的 OID。

字符串

命名空间(对于 pg_catalog 来说为空)。

字符串

关系名称。

Int8

关系的复制身份设置(与 pg_class 中的 relreplident 相同)。

Int16

列数。

接下来,包含在发布中的每一列都会出现以下消息部分(生成的列除外)

Int8

列的标志。目前对于无标志可以是 0,而将该列标记为键的一部分则为 1。

字符串

列名称。

Int32 (Oid)

列的数据类型的 OID。

Int32

列的类型修饰符(atttypmod)。

类型 #
Byte1('Y')

识别消息为类型消息。

Int32 (TransactionId)

事务的 Xid(仅针对流式事务出现)。该字段在协议版本 2 中可用。

Int32 (Oid)

数据类型的 OID。

字符串

命名空间(对于 pg_catalog 来说为空)。

字符串

数据类型名称。

插入 #
Byte1('I')

识别消息为插入消息。

Int32 (TransactionId)

事务的 Xid(仅针对流式事务出现)。该字段在协议版本 2 中可用。

Int32 (Oid)

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

Byte1('N')

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

TupleData

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

更新 #
Byte1('U')

识别消息为更新消息。

Int32 (TransactionId)

事务的 Xid(仅针对流式事务出现)。该字段在协议版本 2 中可用。

Int32 (Oid)

与关系消息中的 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 (TransactionId)

事务的 Xid(仅针对流式事务出现)。该字段在协议版本 2 中可用。

Int32 (Oid)

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

Byte1('K')

识别以下 TupleData 子消息为键。如果发生删除操作的表将索引用作 REPLICA IDENTITY,则此字段将显示。

Byte1('O')

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

TupleData

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

删除消息可能包含“K”消息部分或“O”消息部分,但绝不会同时包含这两者。

截断 #
Byte1('T')

识别消息为截断消息。

Int32 (TransactionId)

事务的 Xid(仅针对流式事务出现)。该字段在协议版本 2 中可用。

Int32

关系数量

Int8

TRUNCATE 的选项位:1 表示 CASCADE,2 表示 RESTART IDENTITY

Int32 (Oid)

关系消息中 ID 对应的关系的 OID。此字段会针对每个关系进行重复。

以下消息(流开始、流停止、流提交和流中止)自协议版本 2 起可用。

流开始 #
Byte1('S')

识别消息为流开始消息。

Int32 (TransactionId)

事务的 Xid。

Int8

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

流停止 #
Byte1('E')

识别消息为流停止消息。

流提交 #
Byte1('c')

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

Int32 (TransactionId)

事务的 Xid。

Int8(0)

标志;目前未使用。

Int64 (XLogRecPtr)

提交的 LSN。

Int64 (XLogRecPtr)

事务的结束 LSN。

Int64 (TimestampTz)

事务的提交时间戳。该值为自 PostgreSQL epoch(2000-01-01)起以微秒计的数字。

流中止 #
Byte1('A')

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

Int32 (TransactionId)

事务的 Xid。

Int32 (TransactionId)

子事务的 XID(对于顶级事务,将与事务的 XID 相同)。

Int64 (XLogRecPtr)

中止的 LSN。此字段自协议版本 4 起可用。

Int64 (TimestampTz)

事务的中止时间戳。该值为自 PostgreSQL 历元(2000-01-01)以来的微秒数。此字段自协议版本 4 起可用。

以下消息(开始预备、预备、提交预备、回滚预备、流预备)自协议版本 3 起可用。

开始预备 #
Byte1('b')

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

Int64 (XLogRecPtr)

预备的 LSN。

Int64 (XLogRecPtr)

预备事务的结束 LSN。

Int64 (TimestampTz)

事务的预备时间戳。该值为自 PostgreSQL 历元(2000-01-01)以来的微秒数。

Int32 (TransactionId)

事务的 Xid。

字符串

预备事务的用户定义 GID。

预备 #
Byte1('P')

将消息标识为预备事务消息。

Int8(0)

标志;目前未使用。

Int64 (XLogRecPtr)

预备的 LSN。

Int64 (XLogRecPtr)

预备事务的结束 LSN。

Int64 (TimestampTz)

事务的预备时间戳。该值为自 PostgreSQL 历元(2000-01-01)以来的微秒数。

Int32 (TransactionId)

事务的 Xid。

字符串

预备事务的用户定义 GID。

提交预备 #
Byte1('K')

将消息标识为提交预备事务消息。

Int8(0)

标志;目前未使用。

Int64 (XLogRecPtr)

提交预备事务的 LSN。

Int64 (XLogRecPtr)

提交预备事务的结束 LSN。

Int64 (TimestampTz)

事务的提交时间戳。该值为自 PostgreSQL epoch(2000-01-01)起以微秒计的数字。

Int32 (TransactionId)

事务的 Xid。

字符串

预备事务的用户定义 GID。

回滚预备 #
Byte1('r')

将消息标识为回滚预备事务消息。

Int8(0)

标志;目前未使用。

Int64 (XLogRecPtr)

预备事务的结束 LSN。

Int64 (XLogRecPtr)

回滚预备事务的结束 LSN。

Int64 (TimestampTz)

事务的预备时间戳。该值为自 PostgreSQL 历元(2000-01-01)以来的微秒数。

Int64 (TimestampTz)

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

Int32 (TransactionId)

事务的 Xid。

字符串

预备事务的用户定义 GID。

流预备 #
Byte1('p')

将消息标识为流预备事务消息。

Int8(0)

标志;目前未使用。

Int64 (XLogRecPtr)

预备的 LSN。

Int64 (XLogRecPtr)

预备事务的结束 LSN。

Int64 (TimestampTz)

事务的预备时间戳。该值为自 PostgreSQL 历元(2000-01-01)以来的微秒数。

Int32 (TransactionId)

事务的 Xid。

字符串

预备事务的用户定义 GID。

上述消息的部分由以下部分共享。

元组数据 #
Int16

列数。

接下来,对于每一列(生成列除外),将出现以下子消息之一

Byte1('n')

将数据标识为 NULL 值。

Byte1('u')

标识未更改的 TOAST 值(不发送实际值)。

Byte1('t')

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

Byte1('b')

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

Int32

列值的长度。

Byten

列的值,可以是二进制格式,也可以是文本格式。(按照前一个格式字节中指定)。n 是上述长度。