]> granicus.if.org Git - postgresql/commitdiff
Make crash recovery ignore recovery_min_apply_delay setting.
authorFujii Masao <fujii@postgresql.org>
Fri, 18 Oct 2019 13:24:18 +0000 (22:24 +0900)
committerFujii Masao <fujii@postgresql.org>
Fri, 18 Oct 2019 13:25:42 +0000 (22:25 +0900)
In v11 or before, this setting could not take effect in crash recovery
because it's specified in recovery.conf and crash recovery always
starts without recovery.conf. But commit 2dedf4d9a8 integrated
recovery.conf into postgresql.conf and which unexpectedly allowed
this setting to take effect even in crash recovery. This is definitely
not good behavior.

To fix the issue, this commit makes crash recovery always ignore
recovery_min_apply_delay setting.

Back-patch to v12 where the issue was added.

Author: Fujii Masao
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/CAHGQGwEyD6HdZLfdWc+95g=VQFPR4zQL4n+yHxQgGEGjaSVheQ@mail.gmail.com
Discussion: https://postgr.es/m/e445616d-023e-a268-8aa1-67b8b335340c@pgmasters.net

doc/src/sgml/config.sgml
src/backend/access/transam/xlog.c

index 47b12c6a8f49643142974452e466d9bc5b8a2c8b..886632ff439e5f3f73be717465dd3f32b0780b3b 100644 (file)
@@ -4209,7 +4209,8 @@ ANY <replaceable class="parameter">num_sync</replaceable> ( <replaceable class="
        </para>
        <para>
         This parameter is intended for use with streaming replication deployments;
-        however, if the parameter is specified it will be honored in all cases.
+        however, if the parameter is specified it will be honored in all cases
+        except crash recovery.
 
         <varname>hot_standby_feedback</varname> will be delayed by use of this feature
         which could lead to bloat on the master; use both together with care.
index a85aa835d380d5a834be5b5827d8c711127f634b..861297bda5e5743b838d848f528580755479870e 100644 (file)
@@ -5977,6 +5977,10 @@ recoveryApplyDelay(XLogReaderState *record)
        if (!reachedConsistency)
                return false;
 
+       /* nothing to do if crash recovery is requested */
+       if (!ArchiveRecoveryRequested)
+               return false;
+
        /*
         * Is it a COMMIT record?
         *