本节介绍逻辑复制协议,它是由START_REPLICATION
SLOT
slot_name
LOGICAL
复制命令启动的消息流。
逻辑流式复制协议建立在物理流式复制协议的基元上。
逻辑复制START_REPLICATION
命令接受下列参数:
协议版本。当前仅支持版本1
。
逗号分隔的要订阅的发布名称列表(接收更改)。 单个发布名称被视为标准对象名称,并可根据需要引用。
单个协议消息在以下小节中讨论。 单独的消息在第 52.9 节中描述。
所有顶级协议消息都以消息类型字节开头。虽然在代码中表示为字符, 但这是一个带符号的字节,没有关联的编码。
由于流式复制协议提供消息长度,因此顶层协议消息不需要在头中嵌入一个长度。
除了START_REPLICATION
命令和重放进度消息之外,
所有信息仅从后端流向前端。
逻辑复制协议逐个发送单个事务。 这意味着一对Begin和Commit消息之间的所有消息都属于同一个事务。
每个发送的事务包含零个或多个DML消息(插入、更新、删除)。在级联设置的情况下, 它也可以包含起始消息。起始消息表明事务发起于不同的复制节点。 由于逻辑复制协议范围内的复制节点几乎可以做任何事情,唯一的标识符是起始名称。 下游负责根据需要处理(如果需要)。起始消息始终在事务中的任何DML消息之前发送。
每个DML消息都包含一个任意的关系ID,它可以映射到Relation消息中的ID。 Relation消息描述给定关系的模式。Relation消息是为给定关系发送的, 因为它是我们第一次在当前会话中为给定关系发送DML消息, 或者是因为自从发送最后一个Relation消息以来关系定义已更改。 该协议假定客户端能够为尽可能多的关系缓存元数据。