1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

pg_upgrade: preserve the timestamp epoch

This is useful for replication tools like Slony and Skytools.  This is a
backpatch of a74a4aa23b.

Report by Sergey Konoplev

Backpatch through 9.3
This commit is contained in:
Bruce Momjian
2014-09-11 18:39:46 -04:00
parent bca91236a7
commit 5724f491d2
3 changed files with 18 additions and 9 deletions

View File

@ -234,16 +234,20 @@ get_control_data(ClusterInfo *cluster, bool live_check)
} }
else if ((p = strstr(bufin, "Latest checkpoint's NextXID:")) != NULL) else if ((p = strstr(bufin, "Latest checkpoint's NextXID:")) != NULL)
{ {
char *op = strchr(p, '/'); p = strchr(p, ':');
if (op == NULL) if (p == NULL || strlen(p) <= 1)
op = strchr(p, ':');
if (op == NULL || strlen(op) <= 1)
pg_log(PG_FATAL, "%d: controldata retrieval problem\n", __LINE__); pg_log(PG_FATAL, "%d: controldata retrieval problem\n", __LINE__);
op++; /* removing ':' char */ p++; /* removing ':' char */
cluster->controldata.chkpnt_nxtxid = str2uint(op); cluster->controldata.chkpnt_nxtepoch = str2uint(p);
p = strchr(p, '/');
if (p == NULL || strlen(p) <= 1)
pg_log(PG_FATAL, "%d: controldata retrieval problem\n", __LINE__);
p++; /* removing '/' char */
cluster->controldata.chkpnt_nxtxid = str2uint(p);
got_xid = true; got_xid = true;
} }
else if ((p = strstr(bufin, "Latest checkpoint's NextOID:")) != NULL) else if ((p = strstr(bufin, "Latest checkpoint's NextOID:")) != NULL)

View File

@ -423,12 +423,16 @@ copy_clog_xlog_xid(void)
/* copy old commit logs to new data dir */ /* copy old commit logs to new data dir */
copy_subdir_files("pg_clog"); copy_subdir_files("pg_clog");
/* set the next transaction id of the new cluster */ /* set the next transaction id and epoch of the new cluster */
prep_status("Setting next transaction ID for new cluster"); prep_status("Setting next transaction ID and epoch for new cluster");
exec_prog(UTILITY_LOG_FILE, NULL, true, exec_prog(UTILITY_LOG_FILE, NULL, true,
"\"%s/pg_resetxlog\" -f -x %u \"%s\"", "\"%s/pg_resetxlog\" -f -x %u \"%s\"",
new_cluster.bindir, old_cluster.controldata.chkpnt_nxtxid, new_cluster.bindir, old_cluster.controldata.chkpnt_nxtxid,
new_cluster.pgdata); new_cluster.pgdata);
exec_prog(UTILITY_LOG_FILE, NULL, true,
"\"%s/pg_resetxlog\" -f -e %u \"%s\"",
new_cluster.bindir, old_cluster.controldata.chkpnt_nxtepoch,
new_cluster.pgdata);
check_ok(); check_ok();
/* /*

View File

@ -188,6 +188,7 @@ typedef struct
char nextxlogfile[25]; char nextxlogfile[25];
uint32 chkpnt_tli; uint32 chkpnt_tli;
uint32 chkpnt_nxtxid; uint32 chkpnt_nxtxid;
uint32 chkpnt_nxtepoch;
uint32 chkpnt_nxtoid; uint32 chkpnt_nxtoid;
uint32 chkpnt_nxtmulti; uint32 chkpnt_nxtmulti;
uint32 chkpnt_nxtmxoff; uint32 chkpnt_nxtmxoff;