pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
要启动流复制,前端在 startup 消息中发送 replication 参数。它会告诉后端进入 walsender 模式,在该模式下只能发出少量复制命令,而不能发出 SQL 语句。walsender 模式下只能使用简单查询协议。 walsender 模式下接受的命令有:
请求服务器标识自身。服务器返回一个只有一行的结果集,包含两个 字段:
标识集簇的唯一系统标识符。可用于检查初始化备库所用的基础 备份是否来自同一个集簇。
当前 TimelineID。也可用于检查备库是否与主库一致。
XXX/XXX指示服务器开始流式传输 WAL,从 WAL 位置 XXX/XXX 开始。 服务器可能回复错误,例如所请求的 WAL 段已被回收。成功时, 服务器会回复一条 CopyOutResponse 消息,然后开始向前端流式传输 WAL。 WAL 将持续流式传输,直到连接断开为止;不会再接受其他命令。
WAL 数据以一系列 CopyData 消息发送。(这样可以混合发送其他 信息;尤其是服务器在开始流式传输后遇到故障时,可以发送 ErrorResponse 消息。)每条 CopyData 消息的有效载荷遵循以下 格式:
Identifies the message as WAL data.
本消息中 WAL 数据的起始点,以 XLogRecPtr 格式给出。
服务器上 WAL 的当前末尾,以 XLogRecPtr 格式给出。
传输时服务器的系统时钟,以 TimestampTz 格式给出。
nWAL 数据流的一段。
单条 WAL 记录绝不会拆分到两条 CopyData 消息中。当一条 WAL 记录跨越 WAL 页边界(因而已经用继续记录拆分)时,它可以在页 边界处拆分。换句话说,第一条主 WAL 记录与它的 继续记录可以在不同的 CopyData 消息中发送。
注意,WAL 数据内部以及上面描述的头部中的所有字段,都采用 发送服务器的本机格式。字节序和时间戳的格式是不可预测的, 除非接收方已验证发送方的系统标识符与自己 pg_control 中的内容一致。
如果 WAL 发送进程正常终止(postmaster 关闭期间),它会在 退出前发送一条 CommandComplete 消息。当然,异常关闭时可能 不会发生这种情况。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。