↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本。 PostgreSQL 9.0 已结束支持。 2015-10-08. 请参阅 当前版本手册.

46.3. Streaming Replication Protocol #

要启动流复制,前端在 startup 消息中发送 replication 参数。它会告诉后端进入 WAL 发送进程模式,在该模式下只能发出少量复制命令,而不能发出 SQL 语句。WAL 发送进程模式下只能使用简单查询协议。WAL 发送进程模式下接受的命令有:

IDENTIFY_SYSTEM

请求服务器标识自身。服务器返回一个只有一行的结果集,包含两个字段:

systemid

标识集簇的唯一系统标识符。可用于检查初始化备库所用的基础备份是否来自同一个集簇。

timeline

当前 TimelineID。也可用于检查备库是否与主库一致。

START_REPLICATION XXX/XXX

指示服务器开始流式传输 WAL,从 WAL 位置 XXX/XXX 开始。服务器可能回复错误,例如所请求的 WAL 段已被回收。成功时,服务器会回复一条 CopyOutResponse 消息,然后开始向前端流式传输 WAL。WAL 将持续流式传输,直到连接断开为止;不会再接受其他命令。

WAL 数据以一系列 CopyData 消息发送。(这样可以混合发送其他信息;尤其是服务器在开始流式传输后遇到故障时,可以发送 ErrorResponse 消息。)每条 CopyData 消息的有效载荷遵循以下格式:

XLogData (B)

Byte1('w')

Identifies the message as WAL data.

Byte8

本消息中 WAL 数据的起始点,以 XLogRecPtr 格式给出。

Byte8

服务器上 WAL 的当前末尾,以 XLogRecPtr 格式给出。

Byte8

传输时服务器的系统时钟,以 TimestampTz 格式给出。

Byten

WAL 数据流的一段。

单条 WAL 记录绝不会拆分到两条 CopyData 消息中。当一条 WAL 记录跨越 WAL 页边界(因而已经用继续记录拆分)时,它可以在页边界处拆分。换句话说,第一条主 WAL 记录与它的继续记录可以在不同的 CopyData 消息中发送。

注意,WAL 数据内部以及上面描述的头部中的所有字段,都采用发送服务器的本机格式。字节序和时间戳的格式是不可预测的,除非接收方已验证发送方的系统标识符与自己 pg_control 中的内容一致。

如果 WAL 发送进程正常终止(postmaster 关闭期间),它会在退出前发送一条 CommandComplete 消息。当然,异常关闭时可能不会发生这种情况。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.