diff --git a/src/backend/access/transam/subtrans.c b/src/backend/access/transam/subtrans.c new file mode 100644 index 8170ba3..c02046c *** a/src/backend/access/transam/subtrans.c --- b/src/backend/access/transam/subtrans.c *************** *** 44,50 **** * 0xFFFFFFFF/SUBTRANS_XACTS_PER_PAGE, and segment numbering at * 0xFFFFFFFF/SUBTRANS_XACTS_PER_PAGE/SLRU_PAGES_PER_SEGMENT. We need take no * explicit notice of that fact in this module, except when comparing segment ! * and page numbers in TruncateSUBTRANS (see SubTransPagePrecedes). */ /* We need four bytes per xact */ --- 44,51 ---- * 0xFFFFFFFF/SUBTRANS_XACTS_PER_PAGE, and segment numbering at * 0xFFFFFFFF/SUBTRANS_XACTS_PER_PAGE/SLRU_PAGES_PER_SEGMENT. We need take no * explicit notice of that fact in this module, except when comparing segment ! * and page numbers in TruncateSUBTRANS (see SubTransPagePrecedes) and zeroing ! * them in StartupSUBTRANS. */ /* We need four bytes per xact */ *************** StartupSUBTRANS(TransactionId oldestActi *** 254,259 **** --- 255,263 ---- { (void) ZeroSUBTRANSPage(startPage); startPage++; + /* must account for wraparound */ + if (startPage > TransactionIdToPage(MaxTransactionId)) + startPage=0; } (void) ZeroSUBTRANSPage(startPage);