Can't truncate pg_subtrans during a recovery checkpoint --- subtrans
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 28 Aug 2004 18:18:03 +0000 (18:18 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 28 Aug 2004 18:18:03 +0000 (18:18 +0000)
module isn't fully initialized yet.

src/backend/access/transam/xlog.c

index 5c07795c8a90ec5cbafaad7c1d0df7538b998e60..32380eeb37b3c6a8abcf2e22b40f7560a0d2d5a7 100644 (file)
@@ -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);
 }