*** a/src/backend/access/transam/xlog.c --- b/src/backend/access/transam/xlog.c *************** *** 7706,7715 **** 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. */ /* All real work is done, but log before releasing lock. */ if (log_checkpoints) --- 7706,7719 ---- } /* ! * 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)