检测后端是主节点还是备节点

要检测 PostgreSQL 实例是主节点(主服务器)还是备节点(从服务器),请执行 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)