52.5. 逻辑流式复制协议

52.5.1. 逻辑流式复制参数
52.5.2. 逻辑复制协议消息
52.5.3. 逻辑复制协议消息流

本节介绍逻辑复制协议,它是由START_REPLICATION SLOT slot_name LOGICAL复制命令启动的消息流。

逻辑流式复制协议建立在物理流式复制协议的基元上。

52.5.1. 逻辑流式复制参数

逻辑复制START_REPLICATION命令接受下列参数:

proto_version

协议版本。当前仅支持版本1

publication_names

逗号分隔的要订阅的发布名称列表(接收更改)。 单个发布名称被视为标准对象名称,并可根据需要引用。

52.5.2. 逻辑复制协议消息

单个协议消息在以下小节中讨论。 单独的消息在第 52.9 节中描述。

所有顶级协议消息都以消息类型字节开头。虽然在代码中表示为字符, 但这是一个带符号的字节,没有关联的编码。

由于流式复制协议提供消息长度,因此顶层协议消息不需要在头中嵌入一个长度。

52.5.3. 逻辑复制协议消息流

除了START_REPLICATION命令和重放进度消息之外, 所有信息仅从后端流向前端。

逻辑复制协议逐个发送单个事务。 这意味着一对Begin和Commit消息之间的所有消息都属于同一个事务。

每个发送的事务包含零个或多个DML消息(插入、更新、删除)。在级联设置的情况下, 它也可以包含起始消息。起始消息表明事务发起于不同的复制节点。 由于逻辑复制协议范围内的复制节点几乎可以做任何事情,唯一的标识符是起始名称。 下游负责根据需要处理(如果需要)。起始消息始终在事务中的任何DML消息之前发送。

每个DML消息都包含一个任意的关系ID,它可以映射到Relation消息中的ID。 Relation消息描述给定关系的模式。Relation消息是为给定关系发送的, 因为它是我们第一次在当前会话中为给定关系发送DML消息, 或者是因为自从发送最后一个Relation消息以来关系定义已更改。 该协议假定客户端能够为尽可能多的关系缓存元数据。