Can't truncate pg_subtrans during a recovery checkpoint --- subtrans
authorTom Lane
Sat, 28 Aug 2004 18:18:03 +0000 (18:18 +0000)
committerTom Lane
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);
 }