受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

54.9. 逻辑复制消息格式 #

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

Begin #
Byte1('B') #

将消息标识为开始消息。

Int64(XLogRecPtr) #

事务的最终LSN。

Int64 (TimestampTz) #

事务的提交时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。

Int32 (TransactionId) #

事务的Xid。

Message #
Byte1('M') #

将消息标识为逻辑解码消息。

Int32 (TransactionId) #

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int8 #

标志; 逻辑解码消息是非事务性的时为0,是事务性的时为1。

Int64(XLogRecPtr) #

逻辑解码消息的LSN。

String #

逻辑解码消息的前缀。

Int32 #

内容的长度。

Byten #

逻辑解码消息的内容。

Commit #
Byte1('C') #

标识消息为提交消息。

Int8(0) #

标志; 目前未使用。

Int64(XLogRecPtr) #

提交的LSN。

Int64(XLogRecPtr) #

事务的结束LSN。

Int64 (TimestampTz) #

事务的提交时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。

Origin #
Byte1('O') #

将消息标识为原始消息。

Int64(XLogRecPtr) #

原始服务器上提交的LSN。

String #

原点的名称。

请注意,在单个事务中可能存在多个Origin消息。

Relation #
Byte1('R') #

标识消息为关系消息。

Int32 (TransactionId) #

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int32 (Oid) #

关系的OID。

String #

命名空间(pg_catalog为空字符串)。

String #

关系名称。

Int8 #

关系的复制标识设置(与relreplidentpg_class中相同)。

Int16 #

列数。

接下来,对于出版物中包含的每一列(除了生成的列),会出现以下消息部分:

Int8 #

列的标志。目前可以是0表示没有标志,或者是1表示将该列标记为键的一部分。

String #

列的名称。

Int32 (Oid) #

列数据类型的OID。

Int32 #

列的类型修饰符 (atttypmod)。

Type #
Byte1('Y') #

将消息标识为类型消息。

Int32 (TransactionId) #

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int32 (Oid) #

数据类型的OID。

String #

命名空间(pg_catalog为空字符串)。

String #

数据类型的名称。

Insert #
Byte1('I') #

标识消息为插入消息。

Int32 (TransactionId) #

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int32 (Oid) #

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

Byte1('N') #

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

TupleData #

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

Update #
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'消息部分,或者两者都不包含,但绝不会同时包含两者。

Delete #
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'消息部分,但绝不会同时包含两者。

Truncate #
Byte1('T') #

将消息标识为截断消息。

Int32 (TransactionId) #

事务的Xid(仅适用于流式事务)。 该字段自协议版本2起可用。

Int32 #

关系数量

Int8 #

选项位用于TRUNCATE命令: 1表示CASCADE,2表示RESTART IDENTITY

Int32 (Oid) #

与关系消息中ID对应的关系的OID。该字段对每个关系都重复。

以下消息(Stream Start,Stream Stop,Stream Commit和Stream Abort)自协议版本2起可用。

Stream Start #
Byte1('S') #

标识消息为流开始消息。

Int32 (TransactionId) #

事务的Xid。

Int8 #

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

Stream Stop #
Byte1('E') #

标识消息为流停止消息。

Stream Commit #
Byte1('c') #

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

Int32 (TransactionId) #

事务的Xid。

Int8(0) #

标志; 目前未使用。

Int64(XLogRecPtr) #

提交的LSN。

Int64(XLogRecPtr) #

事务的结束LSN。

Int64 (TimestampTz) #

事务的提交时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。

Stream Abort #
Byte1('A') #

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

Int32 (TransactionId) #

事务的Xid。

Int32 (TransactionId) #

子事务的Xid(对于顶层事务,将与事务的xid相同)。

以下消息(Begin Prepare,Prepare,Commit Prepared,Rollback Prepared,Stream Prepare)自协议版本3起可用。

Begin Prepare #
Byte1('b') #

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

Int64(XLogRecPtr) #

PREPARE 的 LSN。

Int64(XLogRecPtr) #

预备事务的结束 LSN。

Int64 (TimestampTz) #

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

Int32 (TransactionId) #

事务的Xid。

String #

预备事务的用户定义 GID。

Prepare #
Byte1('P') #

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

Int8(0) #

标志; 目前未使用。

Int64(XLogRecPtr) #

PREPARE 的 LSN。

Int64(XLogRecPtr) #

预备事务的结束 LSN。

Int64 (TimestampTz) #

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

Int32 (TransactionId) #

事务的Xid。

String #

预备事务的用户定义 GID。

Commit Prepared #
Byte1('K') #

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

Int8(0) #

标志; 目前未使用。

Int64(XLogRecPtr) #

预备事务提交的 LSN。

Int64(XLogRecPtr) #

预备事务提交的结束 LSN。

Int64 (TimestampTz) #

事务的提交时间戳。该值是自PostgreSQL纪元(2000-01-01)以来的微秒数。

Int32 (TransactionId) #

事务的Xid。

String #

预备事务的用户定义 GID。

Rollback Prepared #
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。

String #

预备事务的用户定义 GID。

Stream Prepare #
Byte1('p') #

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

Int8(0) #

标志; 目前未使用。

Int64(XLogRecPtr) #

PREPARE 的 LSN。

Int64(XLogRecPtr) #

预备事务的结束 LSN。

Int64 (TimestampTz) #

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

Int32 (TransactionId) #

事务的Xid。

String #

预备事务的用户定义 GID。

以上消息共享以下消息部分。

TupleData #
Int16 #

列数。

接下来,对于每一列(除了生成的列),会出现以下子消息之一:

Byte1('n') #

将数据标识为NULL值。

或者

Byte1('u') #

将TOASTed值标识为未更改的值(实际值未发送)。

或者

Byte1('t') #

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

或者

Byte1('b') #

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

Int32 #

列值的长度。

Byten #

列的值,以二进制或文本格式呈现。 (如前述格式字节中指定)。 n是上述长度。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。