54.9. 逻辑复制消息格式 #
本节描述了每个逻辑复制消息的详细格式。这些消息要么由复制槽 SQL 接口返回,要么由 WAL 发送进程发送。对于 WAL 发送进程,它们被封装在复制协议 WAL 消息中,如第 54.4 节所述,并且通常遵循与物理复制相同的消息流程。
- Begin #
- Message #
- Commit #
- Origin #
注意,单个事务中可能有多条 Origin 消息。
- Relation #
接下来,发布中包含的每一列都会出现以下消息部分:
- Type #
- Insert #
- Update #
- Byte1('U') #
将该消息标识为 Update 消息。
- Int32 (TransactionId) #
事务的 Xid(仅在流式传输的事务中出现)。此字段从协议版本 2 起可用。
- Int32 (Oid) #
关系的 OID,与 Relation 消息中的 ID 对应。
- Byte1('K') #
将后续 TupleData 子消息标识为键。此字段可选,仅在更新更改了属于 REPLICA IDENTITY 索引的某一列或多列的数据时出现。
- Byte1('O') #
将后续 TupleData 子消息标识为旧元组。此字段可选,仅在发生更新的表将 REPLICA IDENTITY 设为 FULL 时出现。
- TupleData #
表示旧元组或主键内容的 TupleData 消息部分。仅在前面的'O'或'K'部分存在时出现。
- Byte1('N') #
将后续 TupleData 消息标识为新元组。
- TupleData #
表示新元组内容的 TupleData 消息部分。
Update 消息可以包含 'K' 消息部分或 'O' 消息部分,也可以两者都不包含,但绝不会同时包含两者。
- Delete #
- Byte1('D') #
将该消息标识为 Delete 消息。
- Int32 (TransactionId) #
事务的 Xid(仅在流式传输的事务中出现)。此字段从协议版本 2 起可用。
- Int32 (Oid) #
关系的 OID,与 Relation 消息中的 ID 对应。
- Byte1('K') #
将后续 TupleData 子消息标识为键。如果发生删除的表使用索引作为 REPLICA IDENTITY,则出现此字段。
- Byte1('O') #
将后续 TupleData 消息标识为旧元组。如果发生删除的表将 REPLICA IDENTITY 设为 FULL,则出现此字段。
- TupleData #
表示旧元组或主键内容的 TupleData 消息部分,具体取决于前一个字段。
Delete 消息可以包含 'K' 消息部分或 'O' 消息部分,但绝不会同时包含两者。
- Truncate #
以下消息(Stream Start、Stream Stop、Stream Commit 和 Stream Abort)自协议版本 2 起可用。
- Stream Start #
- Stream Stop #
- Byte1('E') #
将该消息标识为 Stream Stop 消息。
- Stream Commit #
- Stream Abort #
- Byte1('A') #
将该消息标识为 Stream Abort 消息。
- Int32 (TransactionId) #
事务的 Xid。
- Int32 (TransactionId) #
子事务的 Xid(对于顶层事务,将与事务的 xid 相同)。
- Int64 (XLogRecPtr) #
中止操作的 LSN,仅当 streaming 设置为 parallel 时出现。此字段从协议版本 4 起可用。
- Int64 (TimestampTz) #
事务的中止时间戳,仅当 streaming 设置为 parallel 时出现。该值为自 PostgreSQL 纪元(2000-01-01)以来的微秒数。此字段从协议版本 4 起可用。
以下消息(Begin Prepare、Prepare、Commit Prepared、Rollback Prepared、Stream Prepare)自协议版本 3 起可用。
- Begin Prepare #
- Prepare #
- Commit Prepared #
- Rollback Prepared #
- Byte1('r') #
将该消息标识为 Rollback Prepared 消息。
- 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 #
以上消息共享以下消息部分。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.