Adjust pg_upgrade check for pg_upgrade_support to happen after the
authorBruce Momjian <[email protected]>
Wed, 22 Jun 2011 21:47:23 +0000 (17:47 -0400)
committerBruce Momjian <[email protected]>
Wed, 22 Jun 2011 21:47:23 +0000 (17:47 -0400)
binary directory has been validated.

Backpatch to 9.1.

Dan McGee

contrib/pg_upgrade/check.c
contrib/pg_upgrade/option.c
contrib/pg_upgrade/pg_upgrade.h

index 2b481da4895ddae9ef46d0ff39d0c845bee78258..377dea2b6f758fba8ba53f7713b7e2e640b547f5 100644 (file)
@@ -19,6 +19,7 @@ static void check_is_super_user(ClusterInfo *cluster);
 static void check_for_prepared_transactions(ClusterInfo *cluster);
 static void check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster);
 static void check_for_reg_data_type_usage(ClusterInfo *cluster);
+static void check_for_support_lib(ClusterInfo *cluster);
 
 
 void
@@ -245,21 +246,7 @@ check_cluster_versions(void)
 void
 check_cluster_compatibility(bool live_check)
 {
-   char        libfile[MAXPGPATH];
-   FILE       *lib_test;
-
-   /*
-    * Test pg_upgrade_support.so is in the proper place.    We cannot copy it
-    * ourselves because install directories are typically root-owned.
-    */
-   snprintf(libfile, sizeof(libfile), "%s/pg_upgrade_support%s", new_cluster.libpath,
-            DLSUFFIX);
-
-   if ((lib_test = fopen(libfile, "r")) == NULL)
-       pg_log(PG_FATAL,
-              "pg_upgrade_support%s must be created and installed in %s\n", DLSUFFIX, libfile);
-   else
-       fclose(lib_test);
+   check_for_support_lib(&new_cluster);
 
    /* get/check pg_control data of servers */
    get_control_data(&old_cluster, live_check);
@@ -730,3 +717,42 @@ check_for_reg_data_type_usage(ClusterInfo *cluster)
    else
        check_ok();
 }
+
+
+/*
+ * Test pg_upgrade_support.so is in the proper place.   We cannot copy it
+ * ourselves because install directories are typically root-owned.
+ */
+static void
+check_for_support_lib(ClusterInfo *cluster)
+{
+   char        cmd[MAXPGPATH];
+   char        libdir[MAX_STRING];
+   char        libfile[MAXPGPATH];
+   FILE       *lib_test;
+   FILE       *output;
+
+   snprintf(cmd, sizeof(cmd), "\"%s/pg_config\" --pkglibdir", cluster->bindir);
+
+   if ((output = popen(cmd, "r")) == NULL)
+       pg_log(PG_FATAL, "Could not get pkglibdir data: %s\n",
+              getErrorText(errno));
+
+   fgets(libdir, sizeof(libdir), output);
+
+   pclose(output);
+
+   /* Remove trailing newline */
+   if (strchr(libdir, '\n') != NULL)
+       *strchr(libdir, '\n') = '\0';
+
+   snprintf(libfile, sizeof(libfile), "%s/pg_upgrade_support%s", libdir,
+            DLSUFFIX);
+
+   if ((lib_test = fopen(libfile, "r")) == NULL)
+       pg_log(PG_FATAL,
+              "The pg_upgrade_support module must be created and installed in the %s cluster.\n",
+               CLUSTER_NAME(cluster));
+
+   fclose(lib_test);
+}
index 8153e3087a818bf5f8a8d68972e1f502c958654f..18ce9d7732e1d0c1834407bcdd9d6c809bba9300 100644 (file)
@@ -19,8 +19,6 @@
 static void usage(void);
 static void validateDirectoryOption(char **dirpath,
                   char *envVarName, char *cmdLineOption, char *description);
-static void get_pkglibdirs(void);
-static char *get_pkglibdir(const char *bindir);
 
 
 UserOpts   user_opts;
@@ -213,8 +211,6 @@ parseCommandLine(int argc, char *argv[])
                            "old cluster data resides");
    validateDirectoryOption(&new_cluster.pgdata, "NEWDATADIR", "-D",
                            "new cluster data resides");
-
-   get_pkglibdirs();
 }
 
 
@@ -314,44 +310,3 @@ validateDirectoryOption(char **dirpath, char *envVarName,
 #endif
        (*dirpath)[strlen(*dirpath) - 1] = 0;
 }
-
-
-static void
-get_pkglibdirs(void)
-{
-   /*
-    * we do not need to know the libpath in the old cluster, and might not
-    * have a working pg_config to ask for it anyway.
-    */
-   old_cluster.libpath = NULL;
-   new_cluster.libpath = get_pkglibdir(new_cluster.bindir);
-}
-
-
-static char *
-get_pkglibdir(const char *bindir)
-{
-   char        cmd[MAXPGPATH];
-   char        bufin[MAX_STRING];
-   FILE       *output;
-   int         i;
-
-   snprintf(cmd, sizeof(cmd), "\"%s/pg_config\" --pkglibdir", bindir);
-
-   if ((output = popen(cmd, "r")) == NULL)
-       pg_log(PG_FATAL, "Could not get pkglibdir data: %s\n",
-              getErrorText(errno));
-
-   fgets(bufin, sizeof(bufin), output);
-
-   if (output)
-       pclose(output);
-
-   /* Remove trailing newline */
-   i = strlen(bufin) - 1;
-
-   if (bufin[i] == '\n')
-       bufin[i] = '\0';
-
-   return pg_strdup(bufin);
-}
index a3a085630910849e3aaf804e5a06c607dd48ca53..c27b58aa58c3d0705dd661cc4166a85e71f24eda 100644 (file)
@@ -185,7 +185,6 @@ typedef struct
    uint32      major_version;  /* PG_VERSION of cluster */
    char        major_version_str[64];  /* string PG_VERSION of cluster */
    Oid         pg_database_oid;    /* OID of pg_database relation */
-   char       *libpath;        /* pathname for cluster's pkglibdir */
    char       *tablespace_suffix;      /* directory specification */
 } ClusterInfo;