此条目涉及一个 PostgreSQL 功能,该功能已弃用,并可能在未来的版本中不再支持。
promote_trigger_file 是一个 配置参数,用于指定一个文件的路径,如果该文件存在,则会导致备用节点被晋升为首要节点。
promote_trigger_file 在 PostgreSQL 12 中被添加,用于替换 recovery.conf 文件中的 trigger_file 参数,并在 PostgreSQL 16 中被移除。
默认值
promote_trigger_file 的默认值是: '' (空字符串)。
用法
如果设置了 promote_trigger_file,并且在指定的位置放置了对应的文件,备用节点将会自行晋升。
该文件可以为空。它必须能够被运行 PostgreSQL 的系统用户读取,否则 PostgreSQL 实例将拒绝启动,或者在运行时终止。
在首要节点上,promote_trigger_file 将会被忽略,即使指定的位置不可访问。文件的存在也不会产生任何影响。
在 PostgreSQL 9.0 中,当引入流复制时,promote_trigger_file 是将正在运行的备用节点晋升为首要节点的唯一方法。一般来说,pg_ctl promote (在 PostgreSQL 9.1 中可用) 和 pg_promote() 函数 (在 PostgreSQL 12 中可用) 提供了更便捷的实现方式。
按 PostgreSQL 版本详细信息
promote_trigger_file (PostgreSQL 15)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 备用服务器 |
| 简短描述 | 指定一个文件名,该文件的存在将结束备用节点的恢复过程。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
promote_trigger_file (PostgreSQL 14)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 备用服务器 |
| 简短描述 | 指定一个文件名,该文件的存在将结束备用节点的恢复过程。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
promote_trigger_file (PostgreSQL 13)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 备用服务器 |
| 简短描述 | 指定一个文件名,该文件的存在将结束备用节点的恢复过程。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
promote_trigger_file (PostgreSQL 12)
| 设置 | |
| 单位 | |
| 类别 | 复制 / 备用服务器 |
| 简短描述 | 指定一个文件名,该文件的存在将结束备用节点的恢复过程。 |
| 扩展描述 | |
| 上下文 | sighup |
| 变量类型 | string |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | |
| 重置值 | |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
变更历史
- PostgreSQL 16
- (提交 cd4329d9)
- PostgreSQL 12
- 添加 (提交 2dedf4d9)
示例
如果 promote_trigger_file 被设置为 "/tmp/standby.trg" 并且找到了相应的触发文件,PostgreSQL 日志将包含类似以下的条目:
[2022-11-27 09:47:41 UTC] LOG: 00000: promote trigger file found: /tmp/standby.trg [2022-11-27 09:47:41 UTC] FATAL: 57P01: terminating walreceiver process due to administrator command [2022-11-27 09:47:41 UTC] LOG: 00000: invalid record length at 0/3000208: wanted 24, got 0 [2022-11-27 09:47:41 UTC] LOG: 00000: redo done at 0/30001D0 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 83.20 s [2022-11-27 09:47:41 UTC] LOG: 00000: selected new timeline ID: 2 [2022-11-27 09:47:41 UTC] LOG: 00000: archive recovery complete [2022-11-27 09:47:41 UTC] LOG: 00000: checkpoint starting: force [2022-11-27 09:47:41 UTC] LOG: 00000: database system is ready to accept connections
尝试将 promote_trigger_file 设置到 PostgreSQL 无法访问的位置。
[2022-11-27 09:51:18 UTC] LOG: 00000: received SIGHUP, reloading configuration files [2022-11-27 09:51:18 UTC] LOG: 00000: parameter "promote_trigger_file" changed to "/root/standby.trg" [2022-11-27 09:51:18 UTC] FATAL: 42501: could not stat promote trigger file "/root/standby.trg": Permission denied [2022-11-27 09:51:18 UTC] LOG: 00000: startup process (PID 2210329) exited with exit code 1 [2022-11-27 09:51:18 UTC] LOG: 00000: terminating any other active server processes [2022-11-27 09:51:18 UTC] LOG: 00000: shutting down due to startup process failure [2022-11-27 09:51:18 UTC] LOG: 00000: database system is shut down
参考资料
- PostgreSQL 文档: promote_trigger_file
