此条目与较新PostgreSQL版本中已重命名的功能相关
pg_wal_replay_pause() 是一个用于在备机上暂停 WAL (Write-Ahead Logging,预写日志) 重放(恢复)的系统函数。
pg_wal_replay_pause() 在 PostgreSQL 9.1 中被添加,当时名为 pg_xlog_replay_pause()。
用法
pg_wal_replay_pause() → void
pg_wal_replay_pause() 向 PostgreSQL 发出请求以暂停 WAL 重放;成功后,将不再应用任何后续更改。执行 pg_wal_replay_resume() 以恢复 WAL 重放。
请注意,尽管 pg_wal_replay_pause() 会立即返回,但 WAL 重放实际暂停可能存在延迟。重放暂停的时间点会在 PostgreSQL 日志文件中记录,类似如下条目:
LOG: 00000: recovery has paused
可以使用 pg_is_wal_replay_paused() 来确定 WAL 重放是否已暂停。
从 PostgreSQL 14 开始,还可以使用 pg_get_wal_replay_pause_state() 函数来确定 WAL 重放暂停请求的状态。
变更历史
- PostgreSQL 10
- 重命名为
pg_wal_replay_pause()(commit 806091c9)
- 重命名为
- PostgreSQL 9.1
- 添加为
pg_xlog_replay_pause()(commit 8c6e3adb)
- 添加为
示例
pg_wal_replay_pause() 的基本用法
postgres=# SELECT pg_wal_replay_pause(); pg_wal_replay_pause --------------------- (1 row) postgres=# SELECT pg_get_wal_replay_pause_state(); pg_get_wal_replay_pause_state ------------------------------- paused (1 row) postgres=# SELECT pg_wal_replay_resume(); pg_wal_replay_resume ---------------------- (1 row)
这会在 PostgreSQL 日志文件中生成类似如下的条目:
[2021-04-06 15:14:24 UTC] psql postgres postgres LOG: 00000: statement: SELECT pg_wal_replay_pause(); [2021-04-06 15:14:24 UTC] LOG: 00000: recovery has paused [2021-04-06 15:14:24 UTC] HINT: Execute pg_wal_replay_resume() to continue. [2021-04-06 15:14:34 UTC] psql postgres postgres LOG: 00000: statement: SELECT pg_get_wal_replay_pause_state(); [2021-04-06 15:14:58 UTC] psql postgres postgres LOG: 00000: statement: SELECT pg_wal_replay_resume();
参考资料
- PostgreSQL 文档: 恢复控制函数
