diff --git a/configure b/configure index 353cbe00cae3cffe235cef2aa3b75c756c912684..d9298bf531195a51d828f3a04f07c1db8dc5d73e 100755 --- a/configure +++ b/configure @@ -16749,7 +16749,7 @@ _ACEOF # awk -F is a regex on some platforms, and not on others, so make "." a tab PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' | tr '.' ' ' | -$AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`" +$AWK '{printf "%d%04d", $1, $2}'`" cat >>confdefs.h <<_ACEOF #define PG_VERSION_NUM $PG_VERSION_NUM diff --git a/configure.in b/configure.in index b553475c379b279998a7bcd9c3325d5b11d10d21..c694f7bd9267a93d7dbba6355e02a7055e39e7f0 100644 --- a/configure.in +++ b/configure.in @@ -2193,7 +2193,7 @@ AC_DEFINE_UNQUOTED(PG_VERSION_STR, # awk -F is a regex on some platforms, and not on others, so make "." a tab [PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' | tr '.' ' ' | -$AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`"] +$AWK '{printf "%d%04d", $1, $2}'`"] AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number]) AC_SUBST(PG_VERSION_NUM) diff --git a/src/bin/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c index 1cf64e1a4509501e32a32b68951b4ee387d84a70..59ddc16d6b863ed2ccd6dd810982676ff0d95ffe 100644 --- a/src/bin/pg_upgrade/exec.c +++ b/src/bin/pg_upgrade/exec.c @@ -26,7 +26,7 @@ static int win32_check_directory_write_permissions(void); /* * get_bin_version * - * Fetch versions of binaries for cluster. + * Fetch major version of binaries for cluster. */ static void get_bin_version(ClusterInfo *cluster) @@ -34,8 +34,8 @@ get_bin_version(ClusterInfo *cluster) char cmd[MAXPGPATH], cmd_output[MAX_STRING]; FILE *output; - int pre_dot = 0, - post_dot = 0; + int v1 = 0, + v2 = 0; snprintf(cmd, sizeof(cmd), "\"%s/pg_ctl\" --version", cluster->bindir); @@ -46,14 +46,19 @@ get_bin_version(ClusterInfo *cluster) pclose(output); - /* Remove trailing newline */ - if (strchr(cmd_output, '\n') != NULL) - *strchr(cmd_output, '\n') = '\0'; - - if (sscanf(cmd_output, "%*s %*s %d.%d", &pre_dot, &post_dot) < 1) + if (sscanf(cmd_output, "%*s %*s %d.%d", &v1, &v2) < 1) pg_fatal("could not get pg_ctl version output from %s\n", cmd); - cluster->bin_version = (pre_dot * 100 + post_dot) * 100; + if (v1 < 10) + { + /* old style, e.g. 9.6.1 */ + cluster->bin_version = v1 * 10000 + v2 * 100; + } + else + { + /* new style, e.g. 10.1 */ + cluster->bin_version = v1 * 10000; + } } diff --git a/src/bin/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c index 3e3323a6e8a4a6aacfc0b9056a908540d8b6ca10..a91f18916c72524401f93584c8a0bc4786fbdabb 100644 --- a/src/bin/pg_upgrade/server.c +++ b/src/bin/pg_upgrade/server.c @@ -156,8 +156,8 @@ get_major_server_version(ClusterInfo *cluster) { FILE *version_fd; char ver_filename[MAXPGPATH]; - int integer_version = 0; - int fractional_version = 0; + int v1 = 0, + v2 = 0; snprintf(ver_filename, sizeof(ver_filename), "%s/PG_VERSION", cluster->pgdata); @@ -165,13 +165,21 @@ get_major_server_version(ClusterInfo *cluster) pg_fatal("could not open version file: %s\n", ver_filename); if (fscanf(version_fd, "%63s", cluster->major_version_str) == 0 || - sscanf(cluster->major_version_str, "%d.%d", &integer_version, - &fractional_version) < 1) + sscanf(cluster->major_version_str, "%d.%d", &v1, &v2) < 1) pg_fatal("could not parse PG_VERSION file from %s\n", cluster->pgdata); fclose(version_fd); - return (100 * integer_version + fractional_version) * 100; + if (v1 < 10) + { + /* old style, e.g. 9.6.1 */ + return v1 * 10000 + v2 * 100; + } + else + { + /* new style, e.g. 10.1 */ + return v1 * 10000; + } }