此条目与较新PostgreSQL版本中已重命名的功能相关
pg_switch_wal() 是一个系统函数,它强制 PostgreSQL 切换到一个新的 WAL 文件。
pg_switch_wal() 在 PostgreSQL 8.2 中作为 pg_switch_xlog() 添加。
用法
pg_switch_wal() → pg_lsn
pg_switch_wal() 返回旧 WAL 文件的结束 LSN + 1。
然而,如果自上次 WAL 文件切换以来没有生成 WAL 的活动,则不会执行切换,而是返回当前 WAL 文件的起始位置。
pg_switch_wal() 只能在主服务器上执行(即不能在只读备用服务器上执行)。
变更历史
- PostgreSQL 10
- 从
pg_switch_xlog()重命名为pg_switch_wal()(commit 806091c9)
- 从
- PostgreSQL 9.4
- 返回值类型从
text更改为pg_lsn(提交 6f289c2b) - 在切换到新的 WAL 段时,
pg_switch_xlog()现在用零填充该段剩余的未使用部分,从而消除了对pg_clearxlogtail等实用程序的需求 (commit 9a20a9b2)<
- 返回值类型从
- PostgreSQL 8.2
- 作为
pg_switch_xlog()添加 (commit 704ddaaa)
- 作为
示例
pg_switch_wal() 的基本用法示例
postgres=# SELECT pg_switch_wal(); pg_switch_wal --------------- 0/161F710 (1 row)
如果自上次 WAL 文件切换以来没有生成 WAL 的活动,则不会创建新的 WAL 文件
postgres=# SELECT pg_walfile_name(pg_switch_wal()), pg_walfile_name(pg_switch_wal());
pg_walfile_name | pg_walfile_name
--------------------------+--------------------------
000000010000000200000086 | 000000010000000200000086
(1 row)
然而,在以下示例中,函数 foo() 会导致 WAL 文件活动,因此将始终引起 WAL 文件切换
postgres=# SELECT pg_walfile_name(pg_switch_wal()), foo(), pg_walfile_name(pg_switch_wal());
pg_walfile_name | foo | pg_walfile_name
--------------------------+-----+--------------------------
000000010000000200000097 | | 000000010000000200000098
(1 row)
尝试在备用服务器上执行 pg_switch_wal()
postgres=# SELECT pg_switch_wal(); ERROR: recovery is in progress HINT: WAL control functions cannot be executed during recovery.
参考资料
- PostgreSQL 文档: 备份控制函数
