pg_switch_wal()

切换到新的 WAL 文件的函数

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() 只能在主服务器上执行(即,不是只读备机)。

变更历史

示例

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.

分类

系统函数WAL

另请参阅

pg_walfile_name()pg_walfile_name_offset()

反馈

提交任何关于 "pg_switch_wal()" 的评论、建议或更正 此处