检测后端是主服务器还是备用服务器

要检测 PostgreSQL 实例是主服务器(master)还是备用服务器(slave),请执行 pg_is_in_recovery()TRUE 表示该后端正在“恢复”,即正在重放 WAL 文件,因此是备用服务器;FALSE 则表示该实例是主服务器(或独立实例)。

postgres=# SELECT pg_is_in_recovery();
 pg_is_in_recovery 
-------------------
 t
(1 row)

另外,通过 pg_last_wal_replay_lsn()PostgreSQL 9.6 及更早版本:pg_last_xlog_replay_location())返回的事务日志位置的存在,也可以用来判断。

postgres=# SELECT pg_last_wal_replay_lsn () IS NOT NULL;
 ?column? 
----------
 t
(1 row)