From e72f15ed6064c89d1077a3757ebd9cd4eaad1c13 Mon Sep 17 00:00:00 2001 From: Simon Riggs Date: Mon, 30 Aug 2010 14:22:05 +0000 Subject: [PATCH] Truncate subtrans after each restartpoint. Issue reported by Harald Kolb, patch by Fujii Masao, review by me. --- src/backend/access/transam/xlog.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 617895c147..fd7f205466 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.432 2010/08/26 19:23:41 alvherre Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.433 2010/08/30 14:22:05 sriggs Exp $ * *------------------------------------------------------------------------- */ @@ -7706,10 +7706,14 @@ CreateRestartPoint(int flags) } /* - * Currently, there is no need to truncate pg_subtrans during recovery. If - * we did do that, we will need to have called StartupSUBTRANS() already - * and then TruncateSUBTRANS() would go here. + * 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). When hot standby is disabled, though, we mustn't do + * this because StartupSUBTRANS hasn't been called yet. */ + if (EnableHotStandby) + TruncateSUBTRANS(GetOldestXmin(true, false)); /* All real work is done, but log before releasing lock. */ if (log_checkpoints) -- 2.40.0