Make recovery_target_action = pause work.
authorFujii Masao <fujii@postgresql.org>
Thu, 21 May 2015 04:56:17 +0000 (13:56 +0900)
committerFujii Masao <fujii@postgresql.org>
Thu, 21 May 2015 04:56:17 +0000 (13:56 +0900)
Previously even if recovery_target_action was set to pause and
the recovery target was reached, the recovery could never be paused.
Because the setting of pause was *always* overridden with that of
shutdown unexpectedly. This override is valid and intentional
if hot_standby is not enabled because there is no way to resume
the paused recovery in this case and the setting of pause is
completely useless. But not if hot_standby is enabled.

This patch changes the code so that the setting of pause is overridden
with that of shutdown only when hot_standby is not enabled.

Bug reported by Andres Freund

src/backend/access/transam/xlog.c

index 4af8fdc3642b2aa6ff3f26793b924ff7c0c84f69..3b44c9dade1abbeb15f897f4930493c9def882c0 100644 (file)
@@ -5141,8 +5141,8 @@ readRecoveryCommandFile(void)
         */
        if (recoveryTargetAction == RECOVERY_TARGET_ACTION_PAUSE &&
                recoveryTargetActionSet &&
-               standbyState == STANDBY_DISABLED)
-                       recoveryTargetAction = RECOVERY_TARGET_ACTION_SHUTDOWN;
+               !EnableHotStandby)
+               recoveryTargetAction = RECOVERY_TARGET_ACTION_SHUTDOWN;
 
        /* Enable fetching from archive recovery area */
        ArchiveRecoveryRequested = true;