1. pg_ctl promote发送SIGUSR1信号给postmaster进程。

    同时,PostgreSQL支持快速激活(fast promote)和非快速激活(fallback promote):

    1. fallback_promote 在开启数据库读写前,需要先做一个检查点,现在这个模式已经不对用户开放,需要修改代码,只是用作调试。

    实现分析

    激活过程,根据fast_promote变量判断是否需要先做检查点,再激活。

    数据恢复时,检查standby是否收到promote请求或是否存在trigger文件。 如果是promote请求,则检查有没有promote文件,或者fallback_promote文件,如果有promote文件,则是fast_promote请求。如果有fallback_promote文件,则不是fast_promote请求(实际上根本不可能检测到fallback_promote文件,因为没有写这个文件的操作)。所以通过pg_ctl promote来激活,一定是fast promote的,即不需要先做检查点再激活。 如果检查到trigger文件,同样也是fast promote激活模式。

    最后提一点, 9.3以前,曾经出现过pg_ctl promote -m 来指定是否需要fast promote或者fallback promote。