mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
Display old and new values in pg_resetxlog -n output.
For extra clarity. Rajeev Rastogi, reviewed by Amit Kapila
This commit is contained in:
parent
22310b808d
commit
108e3992cd
@ -177,9 +177,10 @@ PostgreSQL documentation
|
||||
<para>
|
||||
The <option>-n</> (no operation) option instructs
|
||||
<command>pg_resetxlog</command> to print the values reconstructed from
|
||||
<filename>pg_control</> and then exit without modifying anything.
|
||||
This is mainly a debugging tool, but can be useful as a sanity check
|
||||
before allowing <command>pg_resetxlog</command> to proceed for real.
|
||||
<filename>pg_control</> and values about to be changed, and then exit
|
||||
without modifying anything. This is mainly a debugging tool, but can be
|
||||
useful as a sanity check before allowing <command>pg_resetxlog</command>
|
||||
to proceed for real.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -64,10 +64,18 @@ static ControlFileData ControlFile; /* pg_control values */
|
||||
static XLogSegNo newXlogSegNo; /* new XLOG segment # */
|
||||
static bool guessed = false; /* T if we had to guess at any values */
|
||||
static const char *progname;
|
||||
static uint32 set_xid_epoch = (uint32) -1;
|
||||
static TransactionId set_xid = 0;
|
||||
static Oid set_oid = 0;
|
||||
static MultiXactId set_mxid = 0;
|
||||
static MultiXactOffset set_mxoff = (MultiXactOffset) -1;
|
||||
static uint32 minXlogTli = 0;
|
||||
static XLogSegNo minXlogSegNo = 0;
|
||||
|
||||
static bool ReadControlFile(void);
|
||||
static void GuessControlValues(void);
|
||||
static void PrintControlValues(bool guessed);
|
||||
static void PrintNewControlValues(void);
|
||||
static void RewriteControlFile(void);
|
||||
static void FindEndOfXLOG(void);
|
||||
static void KillExistingXLOG(void);
|
||||
@ -82,14 +90,7 @@ main(int argc, char *argv[])
|
||||
int c;
|
||||
bool force = false;
|
||||
bool noupdate = false;
|
||||
uint32 set_xid_epoch = (uint32) -1;
|
||||
TransactionId set_xid = 0;
|
||||
Oid set_oid = 0;
|
||||
MultiXactId set_mxid = 0;
|
||||
MultiXactId set_oldestmxid = 0;
|
||||
MultiXactOffset set_mxoff = (MultiXactOffset) -1;
|
||||
uint32 minXlogTli = 0;
|
||||
XLogSegNo minXlogSegNo = 0;
|
||||
char *endptr;
|
||||
char *endptr2;
|
||||
char *DataDir;
|
||||
@ -301,6 +302,13 @@ main(int argc, char *argv[])
|
||||
*/
|
||||
FindEndOfXLOG();
|
||||
|
||||
/*
|
||||
* If we're not going to proceed with the reset, print the current control
|
||||
* file parameters.
|
||||
*/
|
||||
if ((guessed && !force) || noupdate)
|
||||
PrintControlValues(guessed);
|
||||
|
||||
/*
|
||||
* Adjust fields if required by switches. (Do this now so that printout,
|
||||
* if any, includes these values.)
|
||||
@ -356,7 +364,7 @@ main(int argc, char *argv[])
|
||||
*/
|
||||
if ((guessed && !force) || noupdate)
|
||||
{
|
||||
PrintControlValues(guessed);
|
||||
PrintNewControlValues();
|
||||
if (!noupdate)
|
||||
{
|
||||
printf(_("\nIf these values seem acceptable, use -f to force reset.\n"));
|
||||
@ -556,12 +564,11 @@ static void
|
||||
PrintControlValues(bool guessed)
|
||||
{
|
||||
char sysident_str[32];
|
||||
char fname[MAXFNAMELEN];
|
||||
|
||||
if (guessed)
|
||||
printf(_("Guessed pg_control values:\n\n"));
|
||||
else
|
||||
printf(_("pg_control values:\n\n"));
|
||||
printf(_("Current pg_control values:\n\n"));
|
||||
|
||||
/*
|
||||
* Format system_identifier separately to keep platform-dependent format
|
||||
@ -570,10 +577,6 @@ PrintControlValues(bool guessed)
|
||||
snprintf(sysident_str, sizeof(sysident_str), UINT64_FORMAT,
|
||||
ControlFile.system_identifier);
|
||||
|
||||
XLogFileName(fname, ControlFile.checkPointCopy.ThisTimeLineID, newXlogSegNo);
|
||||
|
||||
printf(_("First log segment after reset: %s\n"),
|
||||
fname);
|
||||
printf(_("pg_control version number: %u\n"),
|
||||
ControlFile.pg_control_version);
|
||||
printf(_("Catalog version number: %u\n"),
|
||||
@ -631,6 +634,60 @@ PrintControlValues(bool guessed)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Print the values to be changed.
|
||||
*/
|
||||
static void
|
||||
PrintNewControlValues()
|
||||
{
|
||||
char fname[MAXFNAMELEN];
|
||||
|
||||
/* This will be always printed in order to keep format same. */
|
||||
printf(_("\n\nValues to be changed:\n\n"));
|
||||
|
||||
XLogFileName(fname, ControlFile.checkPointCopy.ThisTimeLineID, newXlogSegNo);
|
||||
printf(_("First log segment after reset: %s\n"), fname);
|
||||
|
||||
if (set_mxid != 0)
|
||||
{
|
||||
printf(_("NextMultiXactId: %u\n"),
|
||||
ControlFile.checkPointCopy.nextMulti);
|
||||
printf(_("OldestMultiXid: %u\n"),
|
||||
ControlFile.checkPointCopy.oldestMulti);
|
||||
printf(_("OldestMulti's DB: %u\n"),
|
||||
ControlFile.checkPointCopy.oldestMultiDB);
|
||||
}
|
||||
|
||||
if (set_mxoff != -1)
|
||||
{
|
||||
printf(_("NextMultiOffset: %u\n"),
|
||||
ControlFile.checkPointCopy.nextMultiOffset);
|
||||
}
|
||||
|
||||
if (set_oid != 0)
|
||||
{
|
||||
printf(_("NextOID: %u\n"),
|
||||
ControlFile.checkPointCopy.nextOid);
|
||||
}
|
||||
|
||||
if (set_xid != 0)
|
||||
{
|
||||
printf(_("NextXID: %u\n"),
|
||||
ControlFile.checkPointCopy.nextXid);
|
||||
printf(_("OldestXID: %u\n"),
|
||||
ControlFile.checkPointCopy.oldestXid);
|
||||
printf(_("OldestXID's DB: %u\n"),
|
||||
ControlFile.checkPointCopy.oldestXidDB);
|
||||
}
|
||||
|
||||
if (set_xid_epoch != -1)
|
||||
{
|
||||
printf(_("NextXID Epoch: %u\n"),
|
||||
ControlFile.checkPointCopy.nextXidEpoch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Write out the new pg_control file.
|
||||
*/
|
||||
@ -1039,7 +1096,7 @@ usage(void)
|
||||
printf(_(" -f force update to be done\n"));
|
||||
printf(_(" -l XLOGFILE force minimum WAL starting location for new transaction log\n"));
|
||||
printf(_(" -m MXID,MXID set next and oldest multitransaction ID\n"));
|
||||
printf(_(" -n no update, just show extracted control values (for testing)\n"));
|
||||
printf(_(" -n no update, just show what would be done (for testing)\n"));
|
||||
printf(_(" -o OID set next OID\n"));
|
||||
printf(_(" -O OFFSET set next multitransaction offset\n"));
|
||||
printf(_(" -V, --version output version information, then exit\n"));
|
||||
|
Loading…
Reference in New Issue
Block a user