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

Commitb877761

Browse files
committed
pg_upgrade: Fix problems caused by renaming pg_resetxlog.
Commit85c1132 renamed pg_resetxlogto pg_resetwal, but didn't make pg_upgrade smart enough to cope withthe situation.Michael Paquier, per a complaint from Jeff Janes
1 parent6d16ecc commitb877761

File tree

3 files changed

+56
-35
lines changed

3 files changed

+56
-35
lines changed

‎src/bin/pg_upgrade/check.c

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ static void check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster);
2626
staticvoidcheck_for_reg_data_type_usage(ClusterInfo*cluster);
2727
staticvoidcheck_for_jsonb_9_4_usage(ClusterInfo*cluster);
2828
staticvoidcheck_for_pg_role_prefix(ClusterInfo*cluster);
29-
staticvoidget_bin_version(ClusterInfo*cluster);
3029
staticchar*get_canonical_locale_name(intcategory,constchar*locale);
3130

3231

@@ -241,10 +240,6 @@ check_cluster_versions(void)
241240
if (old_cluster.major_version>new_cluster.major_version)
242241
pg_fatal("This utility cannot be used to downgrade to older major PostgreSQL versions.\n");
243242

244-
/* get old and new binary versions */
245-
get_bin_version(&old_cluster);
246-
get_bin_version(&new_cluster);
247-
248243
/* Ensure binaries match the designated data directories */
249244
if (GET_MAJOR_VERSION(old_cluster.major_version)!=
250245
GET_MAJOR_VERSION(old_cluster.bin_version))
@@ -1080,34 +1075,6 @@ check_for_pg_role_prefix(ClusterInfo *cluster)
10801075
check_ok();
10811076
}
10821077

1083-
staticvoid
1084-
get_bin_version(ClusterInfo*cluster)
1085-
{
1086-
charcmd[MAXPGPATH],
1087-
cmd_output[MAX_STRING];
1088-
FILE*output;
1089-
intpre_dot=0,
1090-
post_dot=0;
1091-
1092-
snprintf(cmd,sizeof(cmd),"\"%s/pg_ctl\" --version",cluster->bindir);
1093-
1094-
if ((output=popen(cmd,"r"))==NULL||
1095-
fgets(cmd_output,sizeof(cmd_output),output)==NULL)
1096-
pg_fatal("could not get pg_ctl version data using %s: %s\n",
1097-
cmd,strerror(errno));
1098-
1099-
pclose(output);
1100-
1101-
/* Remove trailing newline */
1102-
if (strchr(cmd_output,'\n')!=NULL)
1103-
*strchr(cmd_output,'\n')='\0';
1104-
1105-
if (sscanf(cmd_output,"%*s %*s %d.%d",&pre_dot,&post_dot)<1)
1106-
pg_fatal("could not get version from %s\n",cmd);
1107-
1108-
cluster->bin_version= (pre_dot*100+post_dot)*100;
1109-
}
1110-
11111078

11121079
/*
11131080
* get_canonical_locale_name

‎src/bin/pg_upgrade/controldata.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ get_control_data(ClusterInfo *cluster, bool live_check)
7070
uint32tli=0;
7171
uint32logid=0;
7272
uint32segno=0;
73+
char*resetwal_bin;
7374

7475

7576
/*
@@ -111,9 +112,14 @@ get_control_data(ClusterInfo *cluster, bool live_check)
111112
pg_putenv("LC_ALL",NULL);
112113
pg_putenv("LC_MESSAGES","C");
113114

115+
/* pg_resetxlog has been renamed to pg_resetwal in version 10 */
116+
if (GET_MAJOR_VERSION(cluster->bin_version)<1000)
117+
resetwal_bin="pg_resetxlog\" -n";
118+
else
119+
resetwal_bin="pg_resetwal\" -n";
114120
snprintf(cmd,sizeof(cmd),"\"%s/%s \"%s\"",
115121
cluster->bindir,
116-
live_check ?"pg_controldata\"" :"pg_resetwal\" -n",
122+
live_check ?"pg_controldata\"" :resetwal_bin,
117123
cluster->pgdata);
118124
fflush(stdout);
119125
fflush(stderr);

‎src/bin/pg_upgrade/exec.c

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,48 @@
1616

1717
staticvoidcheck_data_dir(ClusterInfo*cluster);
1818
staticvoidcheck_bin_dir(ClusterInfo*cluster);
19+
staticvoidget_bin_version(ClusterInfo*cluster);
1920
staticvoidvalidate_exec(constchar*dir,constchar*cmdName);
2021

2122
#ifdefWIN32
2223
staticintwin32_check_directory_write_permissions(void);
2324
#endif
2425

2526

27+
/*
28+
* get_bin_version
29+
*
30+
*Fetch versions of binaries for cluster.
31+
*/
32+
staticvoid
33+
get_bin_version(ClusterInfo*cluster)
34+
{
35+
charcmd[MAXPGPATH],
36+
cmd_output[MAX_STRING];
37+
FILE*output;
38+
intpre_dot=0,
39+
post_dot=0;
40+
41+
snprintf(cmd,sizeof(cmd),"\"%s/pg_ctl\" --version",cluster->bindir);
42+
43+
if ((output=popen(cmd,"r"))==NULL||
44+
fgets(cmd_output,sizeof(cmd_output),output)==NULL)
45+
pg_fatal("could not get pg_ctl version data using %s: %s\n",
46+
cmd,strerror(errno));
47+
48+
pclose(output);
49+
50+
/* Remove trailing newline */
51+
if (strchr(cmd_output,'\n')!=NULL)
52+
*strchr(cmd_output,'\n')='\0';
53+
54+
if (sscanf(cmd_output,"%*s %*s %d.%d",&pre_dot,&post_dot)<1)
55+
pg_fatal("could not get version from %s\n",cmd);
56+
57+
cluster->bin_version= (pre_dot*100+post_dot)*100;
58+
}
59+
60+
2661
/*
2762
* exec_prog()
2863
*Execute an external program with stdout/stderr redirected, and report
@@ -335,7 +370,20 @@ check_bin_dir(ClusterInfo *cluster)
335370

336371
validate_exec(cluster->bindir,"postgres");
337372
validate_exec(cluster->bindir,"pg_ctl");
338-
validate_exec(cluster->bindir,"pg_resetwal");
373+
374+
/*
375+
* Fetch the binary versions after checking for the existence of pg_ctl,
376+
* this gives a correct error if the binary used itself for the version
377+
* fetching is broken.
378+
*/
379+
get_bin_version(&old_cluster);
380+
get_bin_version(&new_cluster);
381+
382+
/* pg_resetxlog has been renamed to pg_resetwal in version 10 */
383+
if (GET_MAJOR_VERSION(cluster->bin_version)<1000)
384+
validate_exec(cluster->bindir,"pg_resetxlog");
385+
else
386+
validate_exec(cluster->bindir,"pg_resetwal");
339387
if (cluster==&new_cluster)
340388
{
341389
/* these are only needed in the new cluster */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp