
在上篇博客中,我们重点介绍了流复制概念、复制命令及逻辑流复制协议,本期将重点介绍扩展查询及消息格式、流复制交互流程。
扩展查询涉及消息的格式










对于 INSERT 命令,标记是 INSERT oid rows,其中 rows 是插入的行数。如果 rows 为 1 并且目标表具有 oid,则 oid 表示插入行的对象 ID。但 OIDs 系统列不再受支持;因此 oid 总是 0。 对于 DELETE 命令,标记为 DELETE rows,其中 rows 是删除的行数。 对于 UPDATE 命令,标记是 UPDATE rows,其中 rows 是更新的行数。 对于 SELECT 或 CREATE TABLE AS 命令,标记是 SELECT rows,其中 rows 是检索的行数。 对于 MOVE 命令,标记为 MOVE rows,其中 rows 是游标位置已更改的行数。 对于 FETCH 命令,标记是 FETCH rows,其中 rows 是从游标检索的行数。 对于 COPY 命令,标记是 COPY rows,其中 rows 是复制的行数。(注意:行计数仅出现在 PostgreSQL 8.2 及更高版本中。)



Byte1 标识字段类型的代码。如果为零,则这是消息终止符,后面没有字符串。由于将来可能会添加更多的字段类型,客户端应默默忽略无法识别类型的字段。ErrorResponse 消息体可能出现的字段标识及其描述可以参考《PostgreSQL Protocol v3.0 深度解析之概览》的 "5.错误消息和通知消息" 章节。 String 字段值。蓝色背景的部分,是消息体的一个字段类型及其值以及结束符 '\0'。一个 ErrorResponse 消息至少包含一个消息体,浅灰色背景的部分是可选的,格式是蓝色部分的重复。消息体的最后,有一个 '\0' 作为消息的结束。



Byte1 标识字段类型的代码。如果为零,则这是消息终止符,后面没有字符串。由于将来可能会添加更多的字段类型,客户端应默默忽略无法识别类型的字段。NoticeResponse 消息体可能出现的字段标识及其描述可以参考《PostgreSQL Protocol v3.0 深度解析之概览》的"5.错误消息和通知消息"章节。 String,字段值。蓝色背景的部分,是消息体的一个字段类型及其值以及结束符'\0'。一个 NoticeResponse 消息至少包含一个消息体,浅灰色背景的部分是可选的,格式是蓝色部分的重复。消息体的最后,有一个'\0'作为消息的结束。
流复制交互流程





以上就是 PostgreSQL Protocol v3 协议中流复制协议的全部内容介绍,主要应用于数据复制和主备场景,往期推荐可回看往期博客详情。欢迎大家关注、点赞、围观 😬
往期推荐

文章转载自KaiwuDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




