Commit 559b114d authored by Bruce Momjian's avatar Bruce Momjian

Adjust pg_upgrade check for pg_upgrade_support to happen after the

binary directory has been validated.

Backpatch to 9.1.

Dan McGee
parent b06ad7de
......@@ -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);
}
......@@ -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);
}
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment