Fix bogus logic for checking data dirs' versions within pg_upgrade.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 16 Nov 2017 16:16:53 +0000 (11:16 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 16 Nov 2017 16:16:53 +0000 (11:16 -0500)
Commit 9be95ef15 failed to cure all of the redundancy here: we were
actually calling get_major_server_version() three times for each
of the old and new data directories.  While that's not enormously
expensive, it's still sloppy.

A. Akenteva

Discussion: https://postgr.es/m/f9266a85d918a3cf3a386b5148aee666@postgrespro.ru

src/bin/pg_upgrade/check.c
src/bin/pg_upgrade/exec.c

index b7e1e4be190177095d5056bfd20094fd01304cf2..1b9083597ca3968777bdaa12d1b1a5b823689815 100644 (file)
@@ -234,9 +234,9 @@ check_cluster_versions(void)
 {
    prep_status("Checking cluster versions");
 
-   /* get old and new cluster versions */
-   old_cluster.major_version = get_major_server_version(&old_cluster);
-   new_cluster.major_version = get_major_server_version(&new_cluster);
+   /* cluster versions should already have been obtained */
+   Assert(old_cluster.major_version != 0);
+   Assert(new_cluster.major_version != 0);
 
    /*
     * We allow upgrades from/to the same major version for alpha/beta
index 810a5a0c3c58d52932558ad8e36857ffa1dc30f6..f5cd74ff97fe9b36bfbbc7524c9f6e4a86dae3f3 100644 (file)
@@ -331,9 +331,8 @@ check_data_dir(ClusterInfo *cluster)
 {
    const char *pg_data = cluster->pgdata;
 
-   /* get old and new cluster versions */
-   old_cluster.major_version = get_major_server_version(&old_cluster);
-   new_cluster.major_version = get_major_server_version(&new_cluster);
+   /* get the cluster version */
+   cluster->major_version = get_major_server_version(cluster);
 
    check_single_dir(pg_data, "");
    check_single_dir(pg_data, "base");