From 072521b8c804cc15800e503244661d17c6202ccc Mon Sep 17 00:00:00 2001
From: Simon Riggs <simon@2ndQuadrant.com>
Date: Thu, 7 Feb 2013 16:33:05 +0000
Subject: [PATCH] Rely only on checkpoint 1 at end of recovery. Searching for
 checkpoint 2 (previous) is not correct in all cases.

Bug report from Heikki Linnakangas
---
 src/backend/access/transam/xlog.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index d644e3982ce..f0df2977a12 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -5777,7 +5777,13 @@ StartupXLOG(void)
 			if (fast_promote)
 			{
 				checkPointLoc = ControlFile->prevCheckPoint;
-				record = ReadCheckpointRecord(xlogreader, checkPointLoc, 2, false);
+
+				/*
+				 * Confirm the last checkpoint is available for us to recover
+				 * from if we fail. Note that we don't check for the secondary
+				 * checkpoint since that isn't available in most base backups.
+				 */
+				record = ReadCheckpointRecord(xlogreader, checkPointLoc, 1, false);
 				if (record != NULL)
 				{
 					checkpoint_wait = false;
-- 
GitLab