]> granicus.if.org Git - postgresql/commitdiff
If multiple recovery_targets are specified, use the latest one.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 8 Jan 2014 20:26:39 +0000 (22:26 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 8 Jan 2014 20:26:39 +0000 (22:26 +0200)
The docs say that only one of recovery_target_xid, recovery_target_time, or
recovery_target_name can be specified. But the code actually did something
different, so that a name overrode time, and xid overrode both time and name.
Now the target specified last takes effect, whether it's an xid, time or
name.

With this patch, we still accept multiple recovery_target settings, even
though docs say that only one can be specified. It's a general property of
the recovery.conf file parser that you if you specify the same option twice,
the last one takes effect, like with postgresql.conf.

src/backend/access/transam/xlog.c

index f7746080a696441ad0f65eba7d5219ef6ebc6938..c29913003809dc14772ca0f761956fb5287aef64 100644 (file)
@@ -5402,13 +5402,6 @@ readRecoveryCommandFile(void)
                }
                else if (strcmp(item->name, "recovery_target_time") == 0)
                {
-                       /*
-                        * if recovery_target_xid or recovery_target_name specified, then
-                        * this overrides recovery_target_time
-                        */
-                       if (recoveryTarget == RECOVERY_TARGET_XID ||
-                               recoveryTarget == RECOVERY_TARGET_NAME)
-                               continue;
                        recoveryTarget = RECOVERY_TARGET_TIME;
 
                        /*
@@ -5425,12 +5418,6 @@ readRecoveryCommandFile(void)
                }
                else if (strcmp(item->name, "recovery_target_name") == 0)
                {
-                       /*
-                        * if recovery_target_xid specified, then this overrides
-                        * recovery_target_name
-                        */
-                       if (recoveryTarget == RECOVERY_TARGET_XID)
-                               continue;
                        recoveryTarget = RECOVERY_TARGET_NAME;
 
                        recoveryTargetName = pstrdup(item->value);