副本数据库是否应处于“恢复”状态 - PostgreSQL

副本数据库是否应处于“恢复”状态 - PostgreSQL

我有两个使用流复制的数据库,似乎处于这种状态

postgres 16319  0.0  0.5 137949952 3077260 ?   Ss   Aug22   0:11 /usr/pgsql-12/bin/postmaster -D /var/lib/pgsql/12/data/
postgres 16321  0.0  0.0 249564  2080 ?        Ss   Aug22   0:00  \_ postgres: logger
postgres 16322  7.3  5.2 137950296 27899272 ?  Ss   Aug22 9031:16  \_ postgres: startup   recovering 0000000100003EA70000002C
postgres 16323  0.8  5.2 137950152 27549964 ?  Ss   Aug22 1001:55  \_ postgres: checkpointer
postgres 16324  0.0  0.1 137949928 1050960 ?   Ss   Aug22   1:40  \_ postgres: background writer
postgres 16338  0.0  0.0 251960  2328 ?        Ss   Aug22  57:32  \_ postgres: stats collector
postgres 16339 10.6  0.0 137961464 5116 ?      Ss   Aug22 13123:06  \_ postgres: walreceiver   streaming 3EA7/2C5A24F0

我通常只在数据库处于不良状态时才注意到“正在恢复”。当我在副本上运行查询时,我得到了

ERROR:  canceling statement due to conflict with recovery

我注意到“流式传输 3EA7/2C5A24F0”并且恢复正在增加。

似乎SELECT * FROM pg_stat_wal_receiver也在增加。

我只是想确保我的数据库没有问题,它只是recovery作为复制机制的一部分使用。

答案1

如果你通过发送预写日志来设置 Postgres 复制,如流复制手册,那么是的,所有副本都处于永久恢复状态,这是正常的。当对主节点执行写入事务时,副本会从主节点接收并应用日志,就像任何处于恢复状态的 Postgres 服务器一样。

您看到的变化的数字是当前收到的交易ID。

请阅读完整的链接页面以澄清详细信息。对我来说,这很清楚,除非升级,否则备用(从属)服务器实际上会持续执行恢复。

相关内容