53.5. 逻辑流复制协议

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

逻辑流复制协议构建在物理流复制协议的 Primitives 之上。

53 .5.1. 逻辑流复制参数

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

  • proto_version

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

    • 逗号分隔的出版物名称列表,供其订阅(接收更改)。各个出版物名称被视为标准对象名称,并可以根据需要引用相同的引号。

53 .5.2. 逻辑复制协议消息

在以下小节中讨论了各个协议消息。 Section 53.9中描述了各个消息。

所有顶级协议消息均以消息类型字节开头。尽管在代码中以字符表示,但是这是一个没有相关编码的带符号字节。

由于流复制协议提供消息长度,因此不需要顶级协议消息在其 Headers 中嵌入长度。

53 .5.3. 逻辑复制协议消息流

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

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

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

每个 DML 消息都包含一个任意的关系 ID,可以将其 Map 到“关系”消息中的 ID。关系消息描述了给定关系的模式。为给定关系发送了关系消息,这是因为这是我们在当前会话中第一次为给定关系发送 DML 消息,或者因为自从为它发送上一个关系消息以来,关系定义已更改。该协议假定 Client 端能够根据需要为多个关系缓存元数据。