On 2019-09-28 19:45, Tom Lane wrote:
> Maybe I'm misunderstanding, but I think that rather than adding error
> checks that were not there before, the right path to fixing this is
> to cause these settings to be ignored if we're doing crash recovery.

That makes sense to me.  Something like this (untested)?

diff --git a/src/backend/access/transam/xlog.c
b/src/backend/access/transam/xlog.c
index 0daab3ff4b..25cae57131 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -5618,6 +5618,13 @@ recoveryStopsBefore(XLogReaderState *record)
        TimestampTz recordXtime = 0;
        TransactionId recordXid;

+       /*
+        * Ignore recovery target settings when not in archive recovery (meaning
+        * we are in crash recovery).
+        */
+       if (!InArchiveRecovery)
+               return false;
+
        /* Check if we should stop as soon as reaching consistency */
        if (recoveryTarget == RECOVERY_TARGET_IMMEDIATE && reachedConsistency)
        {
@@ -5759,6 +5766,13 @@ recoveryStopsAfter(XLogReaderState *record)
        uint8           rmid;
        TimestampTz recordXtime;

+       /*
+        * Ignore recovery target settings when not in archive recovery (meaning
+        * we are in crash recovery).
+        */
+       if (!InArchiveRecovery)
+               return false;
+
        info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
        rmid = XLogRecGetRmid(record);



-- 
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


Reply via email to