aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2012-03-19 09:31:50 -0400
committerBruce Momjian <bruce@momjian.us>2012-03-19 09:31:50 -0400
commit02b183acb42831bbeba819fde568263f19f2acdc (patch)
treee79baabde37950da0db1ea034ea4dce1413267bb
parente3fc4a97bc8ee82a78605b5ffe79bd4cf3c6213b (diff)
downloadpostgresql-02b183acb42831bbeba819fde568263f19f2acdc.tar.gz
postgresql-02b183acb42831bbeba819fde568263f19f2acdc.zip
In pg_upgrade, remove dependency on pg_config, as that might not be in
the non-development install. Instead, use the LOAD mechanism to check for the pg_upgrade_support shared object, like we do for other shared object checks. Backpatch to 9.1. Report from Àlvaro
-rw-r--r--contrib/pg_upgrade/check.c42
-rw-r--r--contrib/pg_upgrade/function.c15
2 files changed, 11 insertions, 46 deletions
diff --git a/contrib/pg_upgrade/check.c b/contrib/pg_upgrade/check.c
index 4b716b6721e..2669c096586 100644
--- a/contrib/pg_upgrade/check.c
+++ b/contrib/pg_upgrade/check.c
@@ -20,7 +20,6 @@ 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);
static void get_bin_version(ClusterInfo *cluster);
@@ -265,8 +264,6 @@ check_cluster_versions(void)
void
check_cluster_compatibility(bool live_check)
{
- check_for_support_lib(&new_cluster);
-
/* get/check pg_control data of servers */
get_control_data(&old_cluster, live_check);
get_control_data(&new_cluster, false);
@@ -836,45 +833,6 @@ check_for_reg_data_type_usage(ClusterInfo *cluster)
}
-/*
- * 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 ||
- fgets(libdir, sizeof(libdir), output) == NULL)
- pg_log(PG_FATAL, "Could not get pkglibdir data using %s: %s\n",
- cmd, getErrorText(errno));
-
-
- 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);
-}
-
-
static void
get_bin_version(ClusterInfo *cluster)
{
diff --git a/contrib/pg_upgrade/function.c b/contrib/pg_upgrade/function.c
index 322503946ea..fe8fb408cd2 100644
--- a/contrib/pg_upgrade/function.c
+++ b/contrib/pg_upgrade/function.c
@@ -13,6 +13,7 @@
#include "access/transam.h"
+#define PG_UPGRADE_SUPPORT "$libdir/pg_upgrade_support"
/*
* install_support_functions_in_new_db()
@@ -154,17 +155,17 @@ get_loadable_libraries(void)
PQfinish(conn);
}
+ totaltups++; /* reserve for pg_upgrade_support */
+
/* Allocate what's certainly enough space */
- if (totaltups > 0)
- os_info.libraries = (char **) pg_malloc(totaltups * sizeof(char *));
- else
- os_info.libraries = NULL;
+ os_info.libraries = (char **) pg_malloc(totaltups * sizeof(char *));
/*
* Now remove duplicates across DBs. This is pretty inefficient code, but
* there probably aren't enough entries to matter.
*/
totaltups = 0;
+ os_info.libraries[totaltups++] = pg_strdup(PG_UPGRADE_SUPPORT);
for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
{
@@ -256,6 +257,12 @@ check_loadable_libraries(void)
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
found = true;
+
+ /* exit and report missing support library with special message */
+ if (strcmp(lib, PG_UPGRADE_SUPPORT) == 0)
+ pg_log(PG_FATAL,
+ "The pg_upgrade_support module must be created and installed in the new cluster.\n");
+
if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL)
pg_log(PG_FATAL, "Could not open file \"%s\": %s\n",
output_path, getErrorText(errno));