synchronous_standby_names
synchronous_standby_names 是一个 配置参数,用于指定支持同步复制的备用服务器列表。
synchronous_standby_names 在 PostgreSQL 9.1 中添加。
默认值
synchronous_standby_names 的默认值是: ''(空字符串)
用法
默认情况下,PostgreSQL 的流复制是异步的,这意味着如果主服务器崩溃,一些在该服务器上已提交的事务可能尚未复制到备用服务器。
如果通过在 synchronous_standby_names 中指定一个或多个备用服务器的名称来启用同步复制,则主服务器上的事务在得到至少一个备用服务器的确认之前不会被标记为已提交。这提供了额外的数据保护,但可能会以牺牲提交速度为代价。
请注意,与其他大多数 GUC 不同,synchronous_standby_names 可以使用类 SQL 语法进行配置,以精细地指定同步复制行为。不同类型的语法将在以下各节中进行描述。
基本语法
原始的基本语法只是一个由逗号分隔的备用服务器名称列表
standy_name[, ...]
将从该列表中选择一个备用服务器作为同步备用服务器。选择的优先级由列表中名称的顺序决定。此语法从 PostgreSQL 9.1 开始可用。
示例配置
synchronous_standby_names='node2,node3'
[FIRST] num_sync(...) 语法
从 PostgreSQL 9.6 开始,可以使用此语法指定需要确认的最小同步备用服务器数量,然后才在主服务器上确认提交
[FIRST]num_sync(standy_name[, ...])
其中 num_sync 是一个整数,指定要从提供的列表中选择的同步备用服务器的数量。
关键字 FIRST(从 PostgreSQL 10 开始可用)是可选的,并且区分大小写。
示例配置
synchronous_standby_names='FIRST2(node2,node3,node4)'
这意味着需要三个命名备用服务器中的两个可用。备用服务器根据它们在列表中指定的顺序进行选择,即列表中名称较早出现的备用服务器具有更高的优先级,并将被视为同步备用服务器。其他备用服务器将被视为潜在的同步备用服务器。
请注意,1 的 num_sync 值等同于原始的基本语法,即
synchronous_standby_names='1(node2,node3)'
等同于上一节的示例。
ANY num_sync(...) 语法
从 PostgreSQL 10 开始,可以使用 ANY 关键字指定基于仲裁的同步复制
ANYnum_sync(standy_name[, ...])
这要求在事务提交之前,至少有指定数量的命名备用服务器确认复制。
关键字 ANY 区分大小写。
示例配置
synchronous_standby_names='ANY2(node2,node3,node4)'
备用服务器命名
在 synchronous_standby_names 中指定的备用服务器名称对应于相应的备用服务器连接到主服务器时在 conninfo 字符串中设置的 application_name 参数。如果未显式设置,则将使用备用服务器的 cluster_name(PostgreSQL 12 及更高版本),否则将使用字符串 walreceiver。备用服务器连接实际使用的 application_name 可以从备用服务器的 pg_stat_replication 条目中同名的列确定。
请注意,在 synchronous_standby_names 中指定的备用服务器名称被视为不区分大小写。
可以使用通配符 * 来匹配 pg_stat_replication 中存在的任何备用服务器的 application_name。
覆盖 synchronous_standby_names
要覆盖同步复制,可以为单个事务设置 synchronous_commit 为 local 或 off。
按 PostgreSQL 版本详细信息
synchronous_standby_names (PostgreSQL 19)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 18)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 17)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 16)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 15)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 14)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 13)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 12)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 11)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 10)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 9.6)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 同步备用服务器的数量以及潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 9.5)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
synchronous_standby_names (PostgreSQL 9.4)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 |
synchronous_standby_names (PostgreSQL 9.3)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 |
synchronous_standby_names (PostgreSQL 9.2)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 |
synchronous_standby_names (PostgreSQL 9.1)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 主服务器 |
| 简短描述 | 潜在同步备用服务器的名称列表。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 |
变更历史
- PostgreSQL 10
- 添加了支持基于仲裁的同步复制的
FIRST和ANY语法 (commit 3901fd70)
- 添加了支持基于仲裁的同步复制的
- PostgreSQL 9.6
- 添加了
num_sync(...)语法 (commit 989be081)
- 添加了
- PostgreSQL 9.1
- 添加 (commit a8a8a3e0)
参考资料
- PostgreSQL 文档: synchronous_standby_names
