From f444dafab0c449bbb3c79683d4488e1ac4978f71 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sat, 28 Aug 2004 18:18:03 +0000
Subject: [PATCH] Can't truncate pg_subtrans during a recovery checkpoint ---
 subtrans module isn't fully initialized yet.

---
 src/backend/access/transam/xlog.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 5c07795c8a9..32380eeb37b 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.163 2004/08/23 23:22:44 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.164 2004/08/28 18:18:03 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -4922,9 +4922,11 @@ CreateCheckPoint(bool shutdown, bool force)
 	 * Truncate pg_subtrans if possible.  We can throw away all data before
 	 * the oldest XMIN of any running transaction.  No future transaction will
 	 * attempt to reference any pg_subtrans entry older than that (see Asserts
-	 * in subtrans.c).
+	 * in subtrans.c).  During recovery, though, we mustn't do this because
+	 * StartupSUBTRANS hasn't been called yet.
 	 */
-	TruncateSUBTRANS(GetOldestXmin(true));
+	if (!InRecovery)
+		TruncateSUBTRANS(GetOldestXmin(true));
 
 	LWLockRelease(CheckpointLock);
 }
-- 
GitLab