PostgreSQL 逻辑流复制协议
- 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
-
要订阅(接收更改)的publication名称列表,用逗号分隔。每一个publication名称个体都被当作一个标准的对象名称,并且可以根据需要加上引号。
52.5.2. 逻辑复制协议消息
协议消息的个体在接下来的小节中讨论。个体的消息在第 52.9 节中介绍。
所有的顶层协议消息都以一个消息类型字节开头。虽然被表示为字符代码,但这是一个没有相关编码的有符号字节。
由于流复制协议提供了一个消息长度,因此不需要顶层协议消息在其头部嵌入长度。
52.5.3. 逻辑复制协议的消息流
除START_REPLICATION
命令和重放进度消息之外,所有信息流的方向都是从后端到前端。
逻辑复制协议会逐个发送事务个体。这意味着在一对Begin消息和Commit消息之间的所有消息都属于同一个事务。
每一个被发送的事务都包含零个或者多个DML消息(插入、更新、删除)。在级联设置的情况下,它还包括Origin消息。Origin消息表示该事务是在不同的复制节点上产生的。由于逻辑复制协议范围内的复制节点可以是任何东西,所以唯一的标识符是源头的名称。其下游的责任是根据需要处理这一信息(如果需要处理)。Origin消息总是在事务中任何DML消息之前被发送。
每个DML消息中都包含一个任意的关系ID,它可以被映射到Relation消息中的一个ID。Relation消息描述给定关系的模式。为一个给定的关系发送Relation消息的时机是:在当前会话中第一次为该关系发送DML消息,或者从上一次该关系的Relation消息以后该关系的定义发生改变。协议假定客户端有能力缓存够用的关系元数据。