On 12/28/2015 10:35 AM, Joe Conway wrote:
> An alternative would be to not have a space at all for those two, e.g.
> 
>   "Latest checkpoint's oldestCommitTsXid:%u\n"
>   "Latest checkpoint's newestCommitTsXid:%u\n"
> 
> That isn't too bad and would leave everything aligned.

That seems like the best solution to me.

8<-----------------------
...
Latest checkpoint's oldestMultiXid:   1
Latest checkpoint's oldestMulti's DB: 1
Latest checkpoint's oldestCommitTsXid:0
Latest checkpoint's newestCommitTsXid:0
Time of latest checkpoint:            Thu 24 Dec 2015 08:55:27 AM PST
Fake LSN counter for unlogged rels:   0/1
...
8<-----------------------

Anyone parsing based on fixed length would be ok, and so would anyone
splitting on the colon.

I retract my earlier suggestion of doing HEAD different from
REL9_5_STABLE, at least for the moment. My patch for pg_controldata
related functions is going to impact all this anyway, so we might as
well not fuss about it now.

Any objections to the attached?

Joe

-- 
Crunchy Data - http://crunchydata.com
PostgreSQL Support for Secure Enterprises
Consulting, Training, & Open Source Development
diff --git a/src/backend/access/rmgrdesc/xlogdesc.c b/src/backend/access/rmgrdesc/xlogdesc.c
index 83cc9e8..5e210b9 100644
*** a/src/backend/access/rmgrdesc/xlogdesc.c
--- b/src/backend/access/rmgrdesc/xlogdesc.c
*************** xlog_desc(StringInfo buf, XLogReaderStat
*** 59,66 ****
  						 checkpoint->oldestXidDB,
  						 checkpoint->oldestMulti,
  						 checkpoint->oldestMultiDB,
! 						 checkpoint->oldestCommitTs,
! 						 checkpoint->newestCommitTs,
  						 checkpoint->oldestActiveXid,
  				 (info == XLOG_CHECKPOINT_SHUTDOWN) ? "shutdown" : "online");
  	}
--- 59,66 ----
  						 checkpoint->oldestXidDB,
  						 checkpoint->oldestMulti,
  						 checkpoint->oldestMultiDB,
! 						 checkpoint->oldestCommitTsXid,
! 						 checkpoint->newestCommitTsXid,
  						 checkpoint->oldestActiveXid,
  				 (info == XLOG_CHECKPOINT_SHUTDOWN) ? "shutdown" : "online");
  	}
diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c
index ed8d98a..a284894 100644
*** a/src/backend/access/transam/commit_ts.c
--- b/src/backend/access/transam/commit_ts.c
*************** TransactionTreeSetCommitTsData(Transacti
*** 217,224 ****
  	commitTsShared->dataLastCommit.nodeid = nodeid;
  
  	/* and move forwards our endpoint, if needed */
! 	if (TransactionIdPrecedes(ShmemVariableCache->newestCommitTs, newestXact))
! 		ShmemVariableCache->newestCommitTs = newestXact;
  	LWLockRelease(CommitTsLock);
  }
  
--- 217,224 ----
  	commitTsShared->dataLastCommit.nodeid = nodeid;
  
  	/* and move forwards our endpoint, if needed */
! 	if (TransactionIdPrecedes(ShmemVariableCache->newestCommitTsXid, newestXact))
! 		ShmemVariableCache->newestCommitTsXid = newestXact;
  	LWLockRelease(CommitTsLock);
  }
  
*************** TransactionIdGetCommitTsData(Transaction
*** 285,292 ****
  	int			entryno = TransactionIdToCTsEntry(xid);
  	int			slotno;
  	CommitTimestampEntry entry;
! 	TransactionId oldestCommitTs;
! 	TransactionId newestCommitTs;
  
  	/* error if the given Xid doesn't normally commit */
  	if (!TransactionIdIsNormal(xid))
--- 285,292 ----
  	int			entryno = TransactionIdToCTsEntry(xid);
  	int			slotno;
  	CommitTimestampEntry entry;
! 	TransactionId oldestCommitTsXid;
! 	TransactionId newestCommitTsXid;
  
  	/* error if the given Xid doesn't normally commit */
  	if (!TransactionIdIsNormal(xid))
*************** TransactionIdGetCommitTsData(Transaction
*** 314,331 ****
  		return *ts != 0;
  	}
  
! 	oldestCommitTs = ShmemVariableCache->oldestCommitTs;
! 	newestCommitTs = ShmemVariableCache->newestCommitTs;
  	/* neither is invalid, or both are */
! 	Assert(TransactionIdIsValid(oldestCommitTs) == TransactionIdIsValid(newestCommitTs));
  	LWLockRelease(CommitTsLock);
  
  	/*
  	 * Return empty if the requested value is outside our valid range.
  	 */
! 	if (!TransactionIdIsValid(oldestCommitTs) ||
! 		TransactionIdPrecedes(xid, oldestCommitTs) ||
! 		TransactionIdPrecedes(newestCommitTs, xid))
  	{
  		*ts = 0;
  		if (nodeid)
--- 314,331 ----
  		return *ts != 0;
  	}
  
! 	oldestCommitTsXid = ShmemVariableCache->oldestCommitTsXid;
! 	newestCommitTsXid = ShmemVariableCache->newestCommitTsXid;
  	/* neither is invalid, or both are */
! 	Assert(TransactionIdIsValid(oldestCommitTsXid) == TransactionIdIsValid(newestCommitTsXid));
  	LWLockRelease(CommitTsLock);
  
  	/*
  	 * Return empty if the requested value is outside our valid range.
  	 */
! 	if (!TransactionIdIsValid(oldestCommitTsXid) ||
! 		TransactionIdPrecedes(xid, oldestCommitTsXid) ||
! 		TransactionIdPrecedes(newestCommitTsXid, xid))
  	{
  		*ts = 0;
  		if (nodeid)
*************** ActivateCommitTs(void)
*** 655,668 ****
  	 * enabled again?  It doesn't look like it does, because there should be a
  	 * checkpoint that sets the value to InvalidTransactionId at end of
  	 * recovery; and so any chance of injecting new transactions without
! 	 * CommitTs values would occur after the oldestCommitTs has been set to
  	 * Invalid temporarily.
  	 */
  	LWLockAcquire(CommitTsLock, LW_EXCLUSIVE);
! 	if (ShmemVariableCache->oldestCommitTs == InvalidTransactionId)
  	{
! 		ShmemVariableCache->oldestCommitTs =
! 			ShmemVariableCache->newestCommitTs = ReadNewTransactionId();
  	}
  	LWLockRelease(CommitTsLock);
  
--- 655,668 ----
  	 * enabled again?  It doesn't look like it does, because there should be a
  	 * checkpoint that sets the value to InvalidTransactionId at end of
  	 * recovery; and so any chance of injecting new transactions without
! 	 * CommitTs values would occur after the oldestCommitTsXid has been set to
  	 * Invalid temporarily.
  	 */
  	LWLockAcquire(CommitTsLock, LW_EXCLUSIVE);
! 	if (ShmemVariableCache->oldestCommitTsXid == InvalidTransactionId)
  	{
! 		ShmemVariableCache->oldestCommitTsXid =
! 			ShmemVariableCache->newestCommitTsXid = ReadNewTransactionId();
  	}
  	LWLockRelease(CommitTsLock);
  
*************** DeactivateCommitTs(void)
*** 711,718 ****
  	TIMESTAMP_NOBEGIN(commitTsShared->dataLastCommit.time);
  	commitTsShared->dataLastCommit.nodeid = InvalidRepOriginId;
  
! 	ShmemVariableCache->oldestCommitTs = InvalidTransactionId;
! 	ShmemVariableCache->newestCommitTs = InvalidTransactionId;
  
  	LWLockRelease(CommitTsLock);
  
--- 711,718 ----
  	TIMESTAMP_NOBEGIN(commitTsShared->dataLastCommit.time);
  	commitTsShared->dataLastCommit.nodeid = InvalidRepOriginId;
  
! 	ShmemVariableCache->oldestCommitTsXid = InvalidTransactionId;
! 	ShmemVariableCache->newestCommitTsXid = InvalidTransactionId;
  
  	LWLockRelease(CommitTsLock);
  
*************** SetCommitTsLimit(TransactionId oldestXac
*** 832,847 ****
  	 * "future" or signal a disabled committs.
  	 */
  	LWLockAcquire(CommitTsLock, LW_EXCLUSIVE);
! 	if (ShmemVariableCache->oldestCommitTs != InvalidTransactionId)
  	{
! 		if (TransactionIdPrecedes(ShmemVariableCache->oldestCommitTs, oldestXact))
! 			ShmemVariableCache->oldestCommitTs = oldestXact;
! 		if (TransactionIdPrecedes(newestXact, ShmemVariableCache->newestCommitTs))
! 			ShmemVariableCache->newestCommitTs = newestXact;
  	}
  	else
  	{
! 		Assert(ShmemVariableCache->newestCommitTs == InvalidTransactionId);
  	}
  	LWLockRelease(CommitTsLock);
  }
--- 832,847 ----
  	 * "future" or signal a disabled committs.
  	 */
  	LWLockAcquire(CommitTsLock, LW_EXCLUSIVE);
! 	if (ShmemVariableCache->oldestCommitTsXid != InvalidTransactionId)
  	{
! 		if (TransactionIdPrecedes(ShmemVariableCache->oldestCommitTsXid, oldestXact))
! 			ShmemVariableCache->oldestCommitTsXid = oldestXact;
! 		if (TransactionIdPrecedes(newestXact, ShmemVariableCache->newestCommitTsXid))
! 			ShmemVariableCache->newestCommitTsXid = newestXact;
  	}
  	else
  	{
! 		Assert(ShmemVariableCache->newestCommitTsXid == InvalidTransactionId);
  	}
  	LWLockRelease(CommitTsLock);
  }
*************** SetCommitTsLimit(TransactionId oldestXac
*** 850,861 ****
   * Move forwards the oldest commitTS value that can be consulted
   */
  void
! AdvanceOldestCommitTs(TransactionId oldestXact)
  {
  	LWLockAcquire(CommitTsLock, LW_EXCLUSIVE);
! 	if (ShmemVariableCache->oldestCommitTs != InvalidTransactionId &&
! 		TransactionIdPrecedes(ShmemVariableCache->oldestCommitTs, oldestXact))
! 		ShmemVariableCache->oldestCommitTs = oldestXact;
  	LWLockRelease(CommitTsLock);
  }
  
--- 850,861 ----
   * Move forwards the oldest commitTS value that can be consulted
   */
  void
! AdvanceOldestCommitTsXid(TransactionId oldestXact)
  {
  	LWLockAcquire(CommitTsLock, LW_EXCLUSIVE);
! 	if (ShmemVariableCache->oldestCommitTsXid != InvalidTransactionId &&
! 		TransactionIdPrecedes(ShmemVariableCache->oldestCommitTsXid, oldestXact))
! 		ShmemVariableCache->oldestCommitTsXid = oldestXact;
  	LWLockRelease(CommitTsLock);
  }
  
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 71fc8ff..06a361a 100644
*** a/src/backend/access/transam/xlog.c
--- b/src/backend/access/transam/xlog.c
*************** BootStrapXLOG(void)
*** 4786,4793 ****
  	checkPoint.oldestXidDB = TemplateDbOid;
  	checkPoint.oldestMulti = FirstMultiXactId;
  	checkPoint.oldestMultiDB = TemplateDbOid;
! 	checkPoint.oldestCommitTs = InvalidTransactionId;
! 	checkPoint.newestCommitTs = InvalidTransactionId;
  	checkPoint.time = (pg_time_t) time(NULL);
  	checkPoint.oldestActiveXid = InvalidTransactionId;
  
--- 4786,4793 ----
  	checkPoint.oldestXidDB = TemplateDbOid;
  	checkPoint.oldestMulti = FirstMultiXactId;
  	checkPoint.oldestMultiDB = TemplateDbOid;
! 	checkPoint.oldestCommitTsXid = InvalidTransactionId;
! 	checkPoint.newestCommitTsXid = InvalidTransactionId;
  	checkPoint.time = (pg_time_t) time(NULL);
  	checkPoint.oldestActiveXid = InvalidTransactionId;
  
*************** StartupXLOG(void)
*** 6302,6309 ****
  					checkPoint.oldestMulti, checkPoint.oldestMultiDB)));
  	ereport(DEBUG1,
  			(errmsg_internal("commit timestamp Xid oldest/newest: %u/%u",
! 					checkPoint.oldestCommitTs,
! 					checkPoint.newestCommitTs)));
  	if (!TransactionIdIsNormal(checkPoint.nextXid))
  		ereport(PANIC,
  				(errmsg("invalid next transaction ID")));
--- 6302,6309 ----
  					checkPoint.oldestMulti, checkPoint.oldestMultiDB)));
  	ereport(DEBUG1,
  			(errmsg_internal("commit timestamp Xid oldest/newest: %u/%u",
! 					checkPoint.oldestCommitTsXid,
! 					checkPoint.newestCommitTsXid)));
  	if (!TransactionIdIsNormal(checkPoint.nextXid))
  		ereport(PANIC,
  				(errmsg("invalid next transaction ID")));
*************** StartupXLOG(void)
*** 6315,6322 ****
  	MultiXactSetNextMXact(checkPoint.nextMulti, checkPoint.nextMultiOffset);
  	SetTransactionIdLimit(checkPoint.oldestXid, checkPoint.oldestXidDB);
  	SetMultiXactIdLimit(checkPoint.oldestMulti, checkPoint.oldestMultiDB);
! 	SetCommitTsLimit(checkPoint.oldestCommitTs,
! 					 checkPoint.newestCommitTs);
  	XLogCtl->ckptXidEpoch = checkPoint.nextXidEpoch;
  	XLogCtl->ckptXid = checkPoint.nextXid;
  
--- 6315,6322 ----
  	MultiXactSetNextMXact(checkPoint.nextMulti, checkPoint.nextMultiOffset);
  	SetTransactionIdLimit(checkPoint.oldestXid, checkPoint.oldestXidDB);
  	SetMultiXactIdLimit(checkPoint.oldestMulti, checkPoint.oldestMultiDB);
! 	SetCommitTsLimit(checkPoint.oldestCommitTsXid,
! 					 checkPoint.newestCommitTsXid);
  	XLogCtl->ckptXidEpoch = checkPoint.nextXidEpoch;
  	XLogCtl->ckptXid = checkPoint.nextXid;
  
*************** CreateCheckPoint(int flags)
*** 8334,8341 ****
  	LWLockRelease(XidGenLock);
  
  	LWLockAcquire(CommitTsLock, LW_SHARED);
! 	checkPoint.oldestCommitTs = ShmemVariableCache->oldestCommitTs;
! 	checkPoint.newestCommitTs = ShmemVariableCache->newestCommitTs;
  	LWLockRelease(CommitTsLock);
  
  	/* Increase XID epoch if we've wrapped around since last checkpoint */
--- 8334,8341 ----
  	LWLockRelease(XidGenLock);
  
  	LWLockAcquire(CommitTsLock, LW_SHARED);
! 	checkPoint.oldestCommitTsXid = ShmemVariableCache->oldestCommitTsXid;
! 	checkPoint.newestCommitTsXid = ShmemVariableCache->newestCommitTsXid;
  	LWLockRelease(CommitTsLock);
  
  	/* Increase XID epoch if we've wrapped around since last checkpoint */
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 7c4ef58..be89b9b 100644
*** a/src/backend/commands/vacuum.c
--- b/src/backend/commands/vacuum.c
*************** vac_truncate_clog(TransactionId frozenXI
*** 1151,1157 ****
  	 */
  	SetTransactionIdLimit(frozenXID, oldestxid_datoid);
  	SetMultiXactIdLimit(minMulti, minmulti_datoid);
! 	AdvanceOldestCommitTs(frozenXID);
  }
  
  
--- 1151,1157 ----
  	 */
  	SetTransactionIdLimit(frozenXID, oldestxid_datoid);
  	SetMultiXactIdLimit(minMulti, minmulti_datoid);
! 	AdvanceOldestCommitTsXid(frozenXID);
  }
  
  
diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c
index 32e1d81..e7e072f 100644
*** a/src/bin/pg_controldata/pg_controldata.c
--- b/src/bin/pg_controldata/pg_controldata.c
*************** main(int argc, char *argv[])
*** 271,280 ****
  		   ControlFile.checkPointCopy.oldestMulti);
  	printf(_("Latest checkpoint's oldestMulti's DB: %u\n"),
  		   ControlFile.checkPointCopy.oldestMultiDB);
! 	printf(_("Latest checkpoint's oldestCommitTs:   %u\n"),
! 		   ControlFile.checkPointCopy.oldestCommitTs);
! 	printf(_("Latest checkpoint's newestCommitTs:   %u\n"),
! 		   ControlFile.checkPointCopy.newestCommitTs);
  	printf(_("Time of latest checkpoint:            %s\n"),
  		   ckpttime_str);
  	printf(_("Fake LSN counter for unlogged rels:   %X/%X\n"),
--- 271,280 ----
  		   ControlFile.checkPointCopy.oldestMulti);
  	printf(_("Latest checkpoint's oldestMulti's DB: %u\n"),
  		   ControlFile.checkPointCopy.oldestMultiDB);
! 	printf(_("Latest checkpoint's oldestCommitTsXid:%u\n"),
! 		   ControlFile.checkPointCopy.oldestCommitTsXid);
! 	printf(_("Latest checkpoint's newestCommitTsXid:%u\n"),
! 		   ControlFile.checkPointCopy.newestCommitTsXid);
  	printf(_("Time of latest checkpoint:            %s\n"),
  		   ckpttime_str);
  	printf(_("Fake LSN counter for unlogged rels:   %X/%X\n"),
diff --git a/src/bin/pg_resetxlog/pg_resetxlog.c b/src/bin/pg_resetxlog/pg_resetxlog.c
index 8826960..6615aea 100644
*** a/src/bin/pg_resetxlog/pg_resetxlog.c
--- b/src/bin/pg_resetxlog/pg_resetxlog.c
*************** static bool guessed = false;	/* T if we
*** 64,71 ****
  static const char *progname;
  static uint32 set_xid_epoch = (uint32) -1;
  static TransactionId set_xid = 0;
! static TransactionId set_oldest_commit_ts = 0;
! static TransactionId set_newest_commit_ts = 0;
  static Oid	set_oid = 0;
  static MultiXactId set_mxid = 0;
  static MultiXactOffset set_mxoff = (MultiXactOffset) -1;
--- 64,71 ----
  static const char *progname;
  static uint32 set_xid_epoch = (uint32) -1;
  static TransactionId set_xid = 0;
! static TransactionId set_oldest_commit_ts_xid = 0;
! static TransactionId set_newest_commit_ts_xid = 0;
  static Oid	set_oid = 0;
  static MultiXactId set_mxid = 0;
  static MultiXactOffset set_mxoff = (MultiXactOffset) -1;
*************** main(int argc, char *argv[])
*** 164,177 ****
  				break;
  
  			case 'c':
! 				set_oldest_commit_ts = strtoul(optarg, &endptr, 0);
  				if (endptr == optarg || *endptr != ',')
  				{
  					fprintf(stderr, _("%s: invalid argument for option %s\n"), progname, "-c");
  					fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
  					exit(1);
  				}
! 				set_newest_commit_ts = strtoul(endptr + 1, &endptr2, 0);
  				if (endptr2 == endptr + 1 || *endptr2 != '\0')
  				{
  					fprintf(stderr, _("%s: invalid argument for option %s\n"), progname, "-c");
--- 164,177 ----
  				break;
  
  			case 'c':
! 				set_oldest_commit_ts_xid = strtoul(optarg, &endptr, 0);
  				if (endptr == optarg || *endptr != ',')
  				{
  					fprintf(stderr, _("%s: invalid argument for option %s\n"), progname, "-c");
  					fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
  					exit(1);
  				}
! 				set_newest_commit_ts_xid = strtoul(endptr + 1, &endptr2, 0);
  				if (endptr2 == endptr + 1 || *endptr2 != '\0')
  				{
  					fprintf(stderr, _("%s: invalid argument for option %s\n"), progname, "-c");
*************** main(int argc, char *argv[])
*** 179,193 ****
  					exit(1);
  				}
  
! 				if (set_oldest_commit_ts < 2 &&
! 					set_oldest_commit_ts != 0)
  				{
  					fprintf(stderr, _("%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n"), progname);
  					exit(1);
  				}
  
! 				if (set_newest_commit_ts < 2 &&
! 					set_newest_commit_ts != 0)
  				{
  					fprintf(stderr, _("%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n"), progname);
  					exit(1);
--- 179,193 ----
  					exit(1);
  				}
  
! 				if (set_oldest_commit_ts_xid < 2 &&
! 					set_oldest_commit_ts_xid != 0)
  				{
  					fprintf(stderr, _("%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n"), progname);
  					exit(1);
  				}
  
! 				if (set_newest_commit_ts_xid < 2 &&
! 					set_newest_commit_ts_xid != 0)
  				{
  					fprintf(stderr, _("%s: transaction ID (-c) must be either 0 or greater than or equal to 2\n"), progname);
  					exit(1);
*************** main(int argc, char *argv[])
*** 383,392 ****
  		ControlFile.checkPointCopy.oldestXidDB = InvalidOid;
  	}
  
! 	if (set_oldest_commit_ts != 0)
! 		ControlFile.checkPointCopy.oldestCommitTs = set_oldest_commit_ts;
! 	if (set_newest_commit_ts != 0)
! 		ControlFile.checkPointCopy.newestCommitTs = set_newest_commit_ts;
  
  	if (set_oid != 0)
  		ControlFile.checkPointCopy.nextOid = set_oid;
--- 383,392 ----
  		ControlFile.checkPointCopy.oldestXidDB = InvalidOid;
  	}
  
! 	if (set_oldest_commit_ts_xid != 0)
! 		ControlFile.checkPointCopy.oldestCommitTsXid = set_oldest_commit_ts_xid;
! 	if (set_newest_commit_ts_xid != 0)
! 		ControlFile.checkPointCopy.newestCommitTsXid = set_newest_commit_ts_xid;
  
  	if (set_oid != 0)
  		ControlFile.checkPointCopy.nextOid = set_oid;
*************** PrintControlValues(bool guessed)
*** 665,674 ****
  		   ControlFile.checkPointCopy.oldestMulti);
  	printf(_("Latest checkpoint's oldestMulti's DB: %u\n"),
  		   ControlFile.checkPointCopy.oldestMultiDB);
! 	printf(_("Latest checkpoint's oldestCommitTs:   %u\n"),
! 		   ControlFile.checkPointCopy.oldestCommitTs);
! 	printf(_("Latest checkpoint's newestCommitTs:   %u\n"),
! 		   ControlFile.checkPointCopy.newestCommitTs);
  	printf(_("Maximum data alignment:               %u\n"),
  		   ControlFile.maxAlign);
  	/* we don't print floatFormat since can't say much useful about it */
--- 665,674 ----
  		   ControlFile.checkPointCopy.oldestMulti);
  	printf(_("Latest checkpoint's oldestMulti's DB: %u\n"),
  		   ControlFile.checkPointCopy.oldestMultiDB);
! 	printf(_("Latest checkpoint's oldestCommitTsXid:%u\n"),
! 		   ControlFile.checkPointCopy.oldestCommitTsXid);
! 	printf(_("Latest checkpoint's newestCommitTsXid:%u\n"),
! 		   ControlFile.checkPointCopy.newestCommitTsXid);
  	printf(_("Maximum data alignment:               %u\n"),
  		   ControlFile.maxAlign);
  	/* we don't print floatFormat since can't say much useful about it */
*************** PrintNewControlValues()
*** 751,765 ****
  			   ControlFile.checkPointCopy.nextXidEpoch);
  	}
  
! 	if (set_oldest_commit_ts != 0)
  	{
! 		printf(_("oldestCommitTs:                       %u\n"),
! 			   ControlFile.checkPointCopy.oldestCommitTs);
  	}
! 	if (set_newest_commit_ts != 0)
  	{
! 		printf(_("newestCommitTs:                       %u\n"),
! 			   ControlFile.checkPointCopy.newestCommitTs);
  	}
  }
  
--- 751,765 ----
  			   ControlFile.checkPointCopy.nextXidEpoch);
  	}
  
! 	if (set_oldest_commit_ts_xid != 0)
  	{
! 		printf(_("oldestCommitTsXid:                    %u\n"),
! 			   ControlFile.checkPointCopy.oldestCommitTsXid);
  	}
! 	if (set_newest_commit_ts_xid != 0)
  	{
! 		printf(_("newestCommitTsXid:                    %u\n"),
! 			   ControlFile.checkPointCopy.newestCommitTsXid);
  	}
  }
  
diff --git a/src/include/access/commit_ts.h b/src/include/access/commit_ts.h
index 425f258..b11715a 100644
*** a/src/include/access/commit_ts.h
--- b/src/include/access/commit_ts.h
*************** extern void ExtendCommitTs(TransactionId
*** 43,49 ****
  extern void TruncateCommitTs(TransactionId oldestXact);
  extern void SetCommitTsLimit(TransactionId oldestXact,
  				 TransactionId newestXact);
! extern void AdvanceOldestCommitTs(TransactionId oldestXact);
  
  /* XLOG stuff */
  #define COMMIT_TS_ZEROPAGE		0x00
--- 43,49 ----
  extern void TruncateCommitTs(TransactionId oldestXact);
  extern void SetCommitTsLimit(TransactionId oldestXact,
  				 TransactionId newestXact);
! extern void AdvanceOldestCommitTsXid(TransactionId oldestXact);
  
  /* XLOG stuff */
  #define COMMIT_TS_ZEROPAGE		0x00
diff --git a/src/include/access/transam.h b/src/include/access/transam.h
index 96b3fac..9ad5761 100644
*** a/src/include/access/transam.h
--- b/src/include/access/transam.h
*************** typedef struct VariableCacheData
*** 126,133 ****
  	/*
  	 * These fields are protected by CommitTsLock
  	 */
! 	TransactionId oldestCommitTs;
! 	TransactionId newestCommitTs;
  
  	/*
  	 * These fields are protected by ProcArrayLock.
--- 126,133 ----
  	/*
  	 * These fields are protected by CommitTsLock
  	 */
! 	TransactionId oldestCommitTsXid;
! 	TransactionId newestCommitTsXid;
  
  	/*
  	 * These fields are protected by ProcArrayLock.
diff --git a/src/include/catalog/pg_control.h b/src/include/catalog/pg_control.h
index ad1eb4b..0b8bea7 100644
*** a/src/include/catalog/pg_control.h
--- b/src/include/catalog/pg_control.h
*************** typedef struct CheckPoint
*** 46,54 ****
  	MultiXactId oldestMulti;	/* cluster-wide minimum datminmxid */
  	Oid			oldestMultiDB;	/* database with minimum datminmxid */
  	pg_time_t	time;			/* time stamp of checkpoint */
! 	TransactionId oldestCommitTs;		/* oldest Xid with valid commit
  										 * timestamp */
! 	TransactionId newestCommitTs;		/* newest Xid with valid commit
  										 * timestamp */
  
  	/*
--- 46,54 ----
  	MultiXactId oldestMulti;	/* cluster-wide minimum datminmxid */
  	Oid			oldestMultiDB;	/* database with minimum datminmxid */
  	pg_time_t	time;			/* time stamp of checkpoint */
! 	TransactionId oldestCommitTsXid;	/* oldest Xid with valid commit
  										 * timestamp */
! 	TransactionId newestCommitTsXid;	/* newest Xid with valid commit
  										 * timestamp */
  
  	/*

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to