pg_wal_replay_pause()
是一个用于暂停备机上 WAL 重放(恢复)的系统函数。
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()
(提交 806091c9)
- 重命名为
- PostgreSQL 9.1
- 添加为
pg_xlog_replay_pause()
(提交 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 文档: 恢复控制函数