PostgreSQL在辅助服务器上进行WAL归档

我正在使用PostgreSQL 9.1进行故障转移的stream式复制和WAL归档。

如果我在备用服务器上使用archive_commandconfiguration指令,它将总是失败(因为它正在尝试归档的WAL段已被master存档),所以我在备用服务器上使用了一个空的archive_command
问题是当我的主服务器closures,备用服务器成为新的主存档停止。 如果服务器在主模式下运行,有没有办法在archive_command脚本中知道?

我可以做一个archive_command脚本返回0,如果文件名段我试图归档已经存在,但我不知道这是否正确的行为为archive_command

你的直觉是正确的 – 有点。

编写一个存档命令,确定本地Postgres服务器当前是否为主(简单方法:连接并执行SELECT pg_is_in_recovery(); – 如果是,则表明您处于从属)。

如果您检测到您在主服务器上,则正常归档段。
如果您检测到您在从属服务器上,请不要执行任何操作并正常退出。


上面的技巧是可行的,因为你无法连接到(崩溃)恢复中的主服务器 – 唯一一次能够连接到处于恢复模式的Postgres服务器的时候,是当你连接到一个带有数据stream的从服务器复制。
在故障转移之后,您的从属服务器将成为主服务器(不再处于恢复模式),因此您的WAL存档脚本将能够执行其操作。

一切正常:在stanby服务器上的PostgreSQL正在恢复模式下运行,所以WAL操作被禁用。