Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4c0e9b5

Browse files
committed
Add new -l flag to set checkpoint location for /contrib/pg_resetxlog.
1 parent0385ba1 commit4c0e9b5

File tree

2 files changed

+37
-10
lines changed

2 files changed

+37
-10
lines changed

‎contrib/pg_resetxlog/README.pg_resetxlog

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Then run pg_resetxlog, and finally install and start the new version of
2222
the database software.
2323

2424
A tertiary purpose it its use by pg_upgrade to set the next transaction
25-
id in pg_control.
25+
idand checkpoint locationin pg_control.
2626

2727
To run the program, make sure your postmaster is not running, then
2828
(as the Postgres admin user) do

‎contrib/pg_resetxlog/pg_resetxlog.c

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
2424
* Portions Copyright (c) 1994, Regents of the University of California
2525
*
26-
* $Header: /cvsroot/pgsql/contrib/pg_resetxlog/Attic/pg_resetxlog.c,v 1.12 2002/01/1018:08:29 momjian Exp $
26+
* $Header: /cvsroot/pgsql/contrib/pg_resetxlog/Attic/pg_resetxlog.c,v 1.13 2002/01/1020:09:06 momjian Exp $
2727
*
2828
*-------------------------------------------------------------------------
2929
*/
@@ -683,6 +683,7 @@ PrintControlValues(void)
683683
"Catalog version number: %u\n"
684684
"Current log file id: %u\n"
685685
"Next log file segment: %u\n"
686+
"Latest checkpoint location: %X/%X\n"
686687
"Latest checkpoint's StartUpID: %u\n"
687688
"Latest checkpoint's NextXID: %u\n"
688689
"Latest checkpoint's NextOID: %u\n"
@@ -695,6 +696,8 @@ PrintControlValues(void)
695696
ControlFile.catalog_version_no,
696697
ControlFile.logId,
697698
ControlFile.logSeg,
699+
ControlFile.checkPoint.xlogid,
700+
ControlFile.checkPoint.xrecoff,
698701
ControlFile.checkPointCopy.ThisStartUpID,
699702
ControlFile.checkPointCopy.nextXid,
700703
ControlFile.checkPointCopy.nextOid,
@@ -709,7 +712,7 @@ PrintControlValues(void)
709712
* Write out the new pg_control file.
710713
*/
711714
staticvoid
712-
RewriteControlFile(TransactionIdset_xid)
715+
RewriteControlFile(TransactionIdset_xid,XLogRecPtrset_checkpoint)
713716
{
714717
intfd;
715718
charbuffer[BLCKSZ];/* need not be aligned */
@@ -733,13 +736,18 @@ RewriteControlFile(TransactionId set_xid)
733736
ControlFile.time=time(NULL);
734737
ControlFile.logId=newXlogId;
735738
ControlFile.logSeg=newXlogSeg+1;
736-
ControlFile.checkPoint=ControlFile.checkPointCopy.redo;
737739
ControlFile.prevCheckPoint.xlogid=0;
738740
ControlFile.prevCheckPoint.xrecoff=0;
739741

740742
if (set_xid!=0)
741743
ControlFile.checkPointCopy.nextXid=set_xid;
742-
744+
745+
if (set_checkpoint.xlogid==0&&
746+
set_checkpoint.xrecoff==0)
747+
ControlFile.checkPoint=ControlFile.checkPointCopy.redo;
748+
else
749+
ControlFile.checkPoint=set_checkpoint;
750+
743751
/* Contents are protected with a CRC */
744752
INIT_CRC64(ControlFile.crc);
745753
COMP_CRC64(ControlFile.crc,
@@ -929,10 +937,11 @@ WriteEmptyXLOG(void)
929937
staticvoid
930938
usage(void)
931939
{
932-
fprintf(stderr,"Usage: pg_resetxlog [-f] [-n] [-x xid] PGDataDirectory\n"
933-
" -f\tforce update to be done\n"
934-
" -n\tno update, just show extracted pg_control values (for testing)\n"
935-
" -x XID\tset XID in pg_control\n");
940+
fprintf(stderr,"Usage: pg_resetxlog [-f] [-n] [-x xid] [ -l log_id offset ] PGDataDirectory\n"
941+
" -f\t force update to be done\n"
942+
" -n\t no update, just show extracted pg_control values (for testing)\n"
943+
" -x XID set XID in pg_control\n"
944+
" -l log_id offset set checkpoint location in pg_control\n");
936945
exit(1);
937946
}
938947

@@ -944,6 +953,7 @@ main(int argc, char **argv)
944953
boolforce= false;
945954
boolnoupdate= false;
946955
TransactionIdset_xid=0;
956+
XLogRecPtrset_checkpoint= {0,0};
947957
intfd;
948958
charpath[MAXPGPATH];
949959

@@ -967,6 +977,23 @@ main(int argc, char **argv)
967977
exit(1);
968978
}
969979
}
980+
elseif (strcmp(argv[argn],"-l")==0)
981+
{
982+
argn++;
983+
if (argn==argc)
984+
usage();
985+
set_checkpoint.xlogid=strtoul(argv[argn],NULL,0);
986+
argn++;
987+
if (argn==argc)
988+
usage();
989+
set_checkpoint.xrecoff=strtoul(argv[argn],NULL,0);
990+
if (set_checkpoint.xlogid==0&&
991+
set_checkpoint.xrecoff==0)
992+
{
993+
fprintf(stderr,"Checkpoint can not be '0 0'.");
994+
exit(1);
995+
}
996+
}
970997
else
971998
usage();
972999
}
@@ -1035,7 +1062,7 @@ main(int argc, char **argv)
10351062
/*
10361063
* Else, do the dirty deed.
10371064
*/
1038-
RewriteControlFile(set_xid);
1065+
RewriteControlFile(set_xid,set_checkpoint);
10391066
KillExistingXLOG();
10401067
WriteEmptyXLOG();
10411068

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp