# 53.5.逻辑流复制协议
本节介绍逻辑复制协议,它是由开始复制
狭槽
插槽名称
必然的
复制命令。
逻辑流复制协议以物理流复制协议的原语为基础。
# 53.5.1.逻辑流复制参数
逻辑复制开始复制
命令接受以下参数:
原型_版本
协议版本。当前版本1.
和2.
支持。版本2.
仅服务器版本14及更高版本支持,它允许对大型正在进行的事务进行流式处理。
出版_名字
要订阅(接收更改)的出版物名称的逗号分隔列表。单个出版物名称被视为标准对象名称,可以根据需要引用相同的名称。
# 53.5.2.逻辑复制协议消息
以下小节将讨论各个协议消息。单独的消息如中所述第53.9节.
所有顶级协议消息都以消息类型字节开头。虽然在代码中表示为字符,但这是一个无关联编码的有符号字节。
由于流式复制协议提供了消息长度,因此顶级协议消息不需要在其报头中嵌入长度。
# 53.5.3.逻辑复制协议消息流
除了开始复制
命令和重播进度消息,所有信息仅从后端流向前端。
逻辑复制协议逐个发送各个事务。这意味着一对Begin和Commit消息之间的所有消息都属于同一事务。它还可以在一对流开始和流停止消息之间发送正在进行的大型事务的更改。此类事务的最后一个流包含流提交或流中止消息。
每个发送的事务都包含零个或多个DML消息(插入、更新、删除)。在级联设置的情况下,它还可以包含源消息。origin消息表示事务起源于不同的复制节点。由于逻辑复制协议范围内的复制节点几乎可以是任何东西,因此唯一的标识符是源名称。根据需要(如果需要)处理这件事是下游的责任。原始消息总是在事务中的任何DML消息之前发送。
每个DML消息都包含一个关系OID,用于标识所处理的发布者的关系。在给定关系OID的第一条DML消息之前,将发送一条关系消息,描述该关系的模式。随后,如果自上次发送关系消息以来,关系的定义发生了更改,则将发送新的关系消息。(协议假设客户机能够根据需要记住尽可能多的关系的元数据。)
关系消息通过其OID标识列类型。对于内置类型,假定客户端可以在本地查找该类型OID,因此不需要额外的数据。对于非内置类型OID,将在关系消息之前发送类型消息,以提供与该OID关联的类型名称。因此,需要明确标识关系列类型的客户机应该缓存类型消息的内容,并首先查看缓存中是否定义了类型OID。如果没有,请在本地查找类型OID。