Commit 6e6bee98 authored by Bruce Momjian's avatar Bruce Momjian

In pg_upgrade, remove use of whichCluster, and just pass old/new cluster

pointers, which simplifies the code.  This was not possible in 9.0 because
everything was in a single nested struct, but is possible now.

Per suggestion from Tom.
parent f82b3e58
...@@ -10,13 +10,12 @@ ...@@ -10,13 +10,12 @@
#include "pg_upgrade.h" #include "pg_upgrade.h"
static void set_locale_and_encoding(Cluster whichCluster); static void set_locale_and_encoding(ClusterInfo *cluster);
static void check_new_db_is_empty(void); static void check_new_db_is_empty(void);
static void check_locale_and_encoding(ControlData *oldctrl, static void check_locale_and_encoding(ControlData *oldctrl,
ControlData *newctrl); ControlData *newctrl);
static void check_for_isn_and_int8_passing_mismatch( static void check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster);
Cluster whichCluster); static void check_for_reg_data_type_usage(ClusterInfo *cluster);
static void check_for_reg_data_type_usage(Cluster whichCluster);
void void
...@@ -46,14 +45,14 @@ check_old_cluster(bool live_check, ...@@ -46,14 +45,14 @@ check_old_cluster(bool live_check,
/* -- OLD -- */ /* -- OLD -- */
if (!live_check) if (!live_check)
start_postmaster(CLUSTER_OLD, false); start_postmaster(&old_cluster, false);
set_locale_and_encoding(CLUSTER_OLD); set_locale_and_encoding(&old_cluster);
get_pg_database_relfilenode(CLUSTER_OLD); get_pg_database_relfilenode(&old_cluster);
/* Extract a list of databases and tables from the old cluster */ /* Extract a list of databases and tables from the old cluster */
get_db_and_rel_infos(&old_cluster.dbarr, CLUSTER_OLD); get_db_and_rel_infos(&old_cluster);
init_tablespaces(); init_tablespaces();
...@@ -64,19 +63,19 @@ check_old_cluster(bool live_check, ...@@ -64,19 +63,19 @@ check_old_cluster(bool live_check,
* Check for various failure cases * Check for various failure cases
*/ */
check_for_reg_data_type_usage(CLUSTER_OLD); check_for_reg_data_type_usage(&old_cluster);
check_for_isn_and_int8_passing_mismatch(CLUSTER_OLD); check_for_isn_and_int8_passing_mismatch(&old_cluster);
/* old = PG 8.3 checks? */ /* old = PG 8.3 checks? */
if (GET_MAJOR_VERSION(old_cluster.major_version) <= 803) if (GET_MAJOR_VERSION(old_cluster.major_version) <= 803)
{ {
old_8_3_check_for_name_data_type_usage(CLUSTER_OLD); old_8_3_check_for_name_data_type_usage(&old_cluster);
old_8_3_check_for_tsquery_usage(CLUSTER_OLD); old_8_3_check_for_tsquery_usage(&old_cluster);
if (user_opts.check) if (user_opts.check)
{ {
old_8_3_rebuild_tsvector_tables(true, CLUSTER_OLD); old_8_3_rebuild_tsvector_tables(&old_cluster, true);
old_8_3_invalidate_hash_gin_indexes(true, CLUSTER_OLD); old_8_3_invalidate_hash_gin_indexes(&old_cluster, true);
old_8_3_invalidate_bpchar_pattern_ops_indexes(true, CLUSTER_OLD); old_8_3_invalidate_bpchar_pattern_ops_indexes(&old_cluster, true);
} }
else else
...@@ -86,12 +85,12 @@ check_old_cluster(bool live_check, ...@@ -86,12 +85,12 @@ check_old_cluster(bool live_check,
* end. * end.
*/ */
*sequence_script_file_name = *sequence_script_file_name =
old_8_3_create_sequence_script(CLUSTER_OLD); old_8_3_create_sequence_script(&old_cluster);
} }
/* Pre-PG 9.0 had no large object permissions */ /* Pre-PG 9.0 had no large object permissions */
if (GET_MAJOR_VERSION(old_cluster.major_version) <= 804) if (GET_MAJOR_VERSION(old_cluster.major_version) <= 804)
new_9_0_populate_pg_largeobject_metadata(true, CLUSTER_OLD); new_9_0_populate_pg_largeobject_metadata(&old_cluster, true);
/* /*
* While not a check option, we do this now because this is the only time * While not a check option, we do this now because this is the only time
...@@ -111,7 +110,7 @@ check_old_cluster(bool live_check, ...@@ -111,7 +110,7 @@ check_old_cluster(bool live_check,
void void
check_new_cluster(void) check_new_cluster(void)
{ {
set_locale_and_encoding(CLUSTER_NEW); set_locale_and_encoding(&new_cluster);
check_new_db_is_empty(); check_new_db_is_empty();
...@@ -149,7 +148,7 @@ issue_warnings(char *sequence_script_file_name) ...@@ -149,7 +148,7 @@ issue_warnings(char *sequence_script_file_name)
/* old = PG 8.3 warnings? */ /* old = PG 8.3 warnings? */
if (GET_MAJOR_VERSION(old_cluster.major_version) <= 803) if (GET_MAJOR_VERSION(old_cluster.major_version) <= 803)
{ {
start_postmaster(CLUSTER_NEW, true); start_postmaster(&new_cluster, true);
/* restore proper sequence values using file created from old server */ /* restore proper sequence values using file created from old server */
if (sequence_script_file_name) if (sequence_script_file_name)
...@@ -165,17 +164,17 @@ issue_warnings(char *sequence_script_file_name) ...@@ -165,17 +164,17 @@ issue_warnings(char *sequence_script_file_name)
check_ok(); check_ok();
} }
old_8_3_rebuild_tsvector_tables(false, CLUSTER_NEW); old_8_3_rebuild_tsvector_tables(&new_cluster, false);
old_8_3_invalidate_hash_gin_indexes(false, CLUSTER_NEW); old_8_3_invalidate_hash_gin_indexes(&new_cluster, false);
old_8_3_invalidate_bpchar_pattern_ops_indexes(false, CLUSTER_NEW); old_8_3_invalidate_bpchar_pattern_ops_indexes(&new_cluster, false);
stop_postmaster(false, true); stop_postmaster(false, true);
} }
/* Create dummy large object permissions for old < PG 9.0? */ /* Create dummy large object permissions for old < PG 9.0? */
if (GET_MAJOR_VERSION(old_cluster.major_version) <= 804) if (GET_MAJOR_VERSION(old_cluster.major_version) <= 804)
{ {
start_postmaster(CLUSTER_NEW, true); start_postmaster(&new_cluster, true);
new_9_0_populate_pg_largeobject_metadata(false, CLUSTER_NEW); new_9_0_populate_pg_largeobject_metadata(&new_cluster, false);
stop_postmaster(false, true); stop_postmaster(false, true);
} }
} }
...@@ -210,8 +209,8 @@ void ...@@ -210,8 +209,8 @@ void
check_cluster_versions(void) check_cluster_versions(void)
{ {
/* get old and new cluster versions */ /* get old and new cluster versions */
old_cluster.major_version = get_major_server_version(&old_cluster.major_version_str, CLUSTER_OLD); old_cluster.major_version = get_major_server_version(&old_cluster, &old_cluster.major_version_str);
new_cluster.major_version = get_major_server_version(&new_cluster.major_version_str, CLUSTER_NEW); new_cluster.major_version = get_major_server_version(&new_cluster, &new_cluster.major_version_str);
/* We allow upgrades from/to the same major version for alpha/beta upgrades */ /* We allow upgrades from/to the same major version for alpha/beta upgrades */
...@@ -270,16 +269,15 @@ check_cluster_compatibility(bool live_check) ...@@ -270,16 +269,15 @@ check_cluster_compatibility(bool live_check)
* query the database to get the template0 locale * query the database to get the template0 locale
*/ */
static void static void
set_locale_and_encoding(Cluster whichCluster) set_locale_and_encoding(ClusterInfo *cluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); ControlData *ctrl = &cluster->controldata;
ControlData *ctrl = &active_cluster->controldata;
PGconn *conn; PGconn *conn;
PGresult *res; PGresult *res;
int i_encoding; int i_encoding;
int cluster_version = active_cluster->major_version; int cluster_version = cluster->major_version;
conn = connectToServer("template1", whichCluster); conn = connectToServer(cluster, "template1");
/* for pg < 80400, we got the values from pg_controldata */ /* for pg < 80400, we got the values from pg_controldata */
if (cluster_version >= 80400) if (cluster_version >= 80400)
...@@ -345,7 +343,7 @@ check_new_db_is_empty(void) ...@@ -345,7 +343,7 @@ check_new_db_is_empty(void)
int dbnum; int dbnum;
bool found = false; bool found = false;
get_db_and_rel_infos(&new_cluster.dbarr, CLUSTER_NEW); get_db_and_rel_infos(&new_cluster);
for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
{ {
...@@ -457,9 +455,8 @@ create_script_for_old_cluster_deletion( ...@@ -457,9 +455,8 @@ create_script_for_old_cluster_deletion(
* it must match for the old and new servers. * it must match for the old and new servers.
*/ */
void void
check_for_isn_and_int8_passing_mismatch(Cluster whichCluster) check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
int dbnum; int dbnum;
FILE *script = NULL; FILE *script = NULL;
bool found = false; bool found = false;
...@@ -478,7 +475,7 @@ check_for_isn_and_int8_passing_mismatch(Cluster whichCluster) ...@@ -478,7 +475,7 @@ check_for_isn_and_int8_passing_mismatch(Cluster whichCluster)
snprintf(output_path, sizeof(output_path), "%s/contrib_isn_and_int8_pass_by_value.txt", snprintf(output_path, sizeof(output_path), "%s/contrib_isn_and_int8_pass_by_value.txt",
os_info.cwd); os_info.cwd);
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{ {
PGresult *res; PGresult *res;
bool db_used = false; bool db_used = false;
...@@ -486,8 +483,8 @@ check_for_isn_and_int8_passing_mismatch(Cluster whichCluster) ...@@ -486,8 +483,8 @@ check_for_isn_and_int8_passing_mismatch(Cluster whichCluster)
int rowno; int rowno;
int i_nspname, int i_nspname,
i_proname; i_proname;
DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; DbInfo *active_db = &cluster->dbarr.dbs[dbnum];
PGconn *conn = connectToServer(active_db->db_name, whichCluster); PGconn *conn = connectToServer(cluster, active_db->db_name);
/* Find any functions coming from contrib/isn */ /* Find any functions coming from contrib/isn */
res = executeQueryOrDie(conn, res = executeQueryOrDie(conn,
...@@ -552,9 +549,8 @@ check_for_isn_and_int8_passing_mismatch(Cluster whichCluster) ...@@ -552,9 +549,8 @@ check_for_isn_and_int8_passing_mismatch(Cluster whichCluster)
* tables upgraded by pg_upgrade. * tables upgraded by pg_upgrade.
*/ */
void void
check_for_reg_data_type_usage(Cluster whichCluster) check_for_reg_data_type_usage(ClusterInfo *cluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
int dbnum; int dbnum;
FILE *script = NULL; FILE *script = NULL;
bool found = false; bool found = false;
...@@ -565,7 +561,7 @@ check_for_reg_data_type_usage(Cluster whichCluster) ...@@ -565,7 +561,7 @@ check_for_reg_data_type_usage(Cluster whichCluster)
snprintf(output_path, sizeof(output_path), "%s/tables_using_reg.txt", snprintf(output_path, sizeof(output_path), "%s/tables_using_reg.txt",
os_info.cwd); os_info.cwd);
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{ {
PGresult *res; PGresult *res;
bool db_used = false; bool db_used = false;
...@@ -574,8 +570,8 @@ check_for_reg_data_type_usage(Cluster whichCluster) ...@@ -574,8 +570,8 @@ check_for_reg_data_type_usage(Cluster whichCluster)
int i_nspname, int i_nspname,
i_relname, i_relname,
i_attname; i_attname;
DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; DbInfo *active_db = &cluster->dbarr.dbs[dbnum];
PGconn *conn = connectToServer(active_db->db_name, whichCluster); PGconn *conn = connectToServer(cluster, active_db->db_name);
res = executeQueryOrDie(conn, res = executeQueryOrDie(conn,
"SELECT n.nspname, c.relname, a.attname " "SELECT n.nspname, c.relname, a.attname "
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
static void check_data_dir(const char *pg_data); static void check_data_dir(const char *pg_data);
static void check_bin_dir(ClusterInfo *cluster, Cluster whichCluster); static void check_bin_dir(ClusterInfo *cluster);
static int check_exec(const char *dir, const char *cmdName); static int check_exec(const char *dir, const char *cmdName);
static const char *validate_exec(const char *path); static const char *validate_exec(const char *path);
...@@ -99,7 +99,7 @@ verify_directories(void) ...@@ -99,7 +99,7 @@ verify_directories(void)
check_ok(); check_ok();
prep_status("Checking old bin directory (%s)", old_cluster.bindir); prep_status("Checking old bin directory (%s)", old_cluster.bindir);
check_bin_dir(&old_cluster, CLUSTER_OLD); check_bin_dir(&old_cluster);
check_ok(); check_ok();
prep_status("Checking new data directory (%s)", new_cluster.pgdata); prep_status("Checking new data directory (%s)", new_cluster.pgdata);
...@@ -107,7 +107,7 @@ verify_directories(void) ...@@ -107,7 +107,7 @@ verify_directories(void)
check_ok(); check_ok();
prep_status("Checking new bin directory (%s)", new_cluster.bindir); prep_status("Checking new bin directory (%s)", new_cluster.bindir);
check_bin_dir(&new_cluster, CLUSTER_NEW); check_bin_dir(&new_cluster);
check_ok(); check_ok();
} }
...@@ -158,12 +158,12 @@ check_data_dir(const char *pg_data) ...@@ -158,12 +158,12 @@ check_data_dir(const char *pg_data)
* exit(). * exit().
*/ */
static void static void
check_bin_dir(ClusterInfo *cluster, Cluster whichCluster) check_bin_dir(ClusterInfo *cluster)
{ {
check_exec(cluster->bindir, "postgres"); check_exec(cluster->bindir, "postgres");
check_exec(cluster->bindir, "pg_ctl"); check_exec(cluster->bindir, "pg_ctl");
check_exec(cluster->bindir, "pg_resetxlog"); check_exec(cluster->bindir, "pg_resetxlog");
if (whichCluster == CLUSTER_NEW) if (cluster == &new_cluster)
{ {
/* these are only needed in the new cluster */ /* these are only needed in the new cluster */
check_exec(cluster->bindir, "pg_config"); check_exec(cluster->bindir, "pg_config");
......
...@@ -28,7 +28,7 @@ install_support_functions(void) ...@@ -28,7 +28,7 @@ install_support_functions(void)
for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
{ {
DbInfo *newdb = &new_cluster.dbarr.dbs[dbnum]; DbInfo *newdb = &new_cluster.dbarr.dbs[dbnum];
PGconn *conn = connectToServer(newdb->db_name, CLUSTER_NEW); PGconn *conn = connectToServer(&new_cluster, newdb->db_name);
/* suppress NOTICE of dropped objects */ /* suppress NOTICE of dropped objects */
PQclear(executeQueryOrDie(conn, PQclear(executeQueryOrDie(conn,
...@@ -99,7 +99,7 @@ uninstall_support_functions(void) ...@@ -99,7 +99,7 @@ uninstall_support_functions(void)
for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
{ {
DbInfo *newdb = &new_cluster.dbarr.dbs[dbnum]; DbInfo *newdb = &new_cluster.dbarr.dbs[dbnum];
PGconn *conn = connectToServer(newdb->db_name, CLUSTER_NEW); PGconn *conn = connectToServer(&new_cluster, newdb->db_name);
/* suppress NOTICE of dropped objects */ /* suppress NOTICE of dropped objects */
PQclear(executeQueryOrDie(conn, PQclear(executeQueryOrDie(conn,
...@@ -123,20 +123,19 @@ uninstall_support_functions(void) ...@@ -123,20 +123,19 @@ uninstall_support_functions(void)
void void
get_loadable_libraries(void) get_loadable_libraries(void)
{ {
ClusterInfo *active_cluster = &old_cluster;
PGresult **ress; PGresult **ress;
int totaltups; int totaltups;
int dbnum; int dbnum;
ress = (PGresult **) ress = (PGresult **)
pg_malloc(active_cluster->dbarr.ndbs * sizeof(PGresult *)); pg_malloc(old_cluster.dbarr.ndbs * sizeof(PGresult *));
totaltups = 0; totaltups = 0;
/* Fetch all library names, removing duplicates within each DB */ /* Fetch all library names, removing duplicates within each DB */
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
{ {
DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; DbInfo *active_db = &old_cluster.dbarr.dbs[dbnum];
PGconn *conn = connectToServer(active_db->db_name, CLUSTER_OLD); PGconn *conn = connectToServer(&old_cluster, active_db->db_name);
/* Fetch all libraries referenced in this DB */ /* Fetch all libraries referenced in this DB */
ress[dbnum] = executeQueryOrDie(conn, ress[dbnum] = executeQueryOrDie(conn,
...@@ -163,7 +162,7 @@ get_loadable_libraries(void) ...@@ -163,7 +162,7 @@ get_loadable_libraries(void)
*/ */
totaltups = 0; totaltups = 0;
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
{ {
PGresult *res = ress[dbnum]; PGresult *res = ress[dbnum];
int ntups; int ntups;
...@@ -207,7 +206,7 @@ get_loadable_libraries(void) ...@@ -207,7 +206,7 @@ get_loadable_libraries(void)
void void
check_loadable_libraries(void) check_loadable_libraries(void)
{ {
PGconn *conn = connectToServer("template1", CLUSTER_NEW); PGconn *conn = connectToServer(&new_cluster, "template1");
int libnum; int libnum;
FILE *script = NULL; FILE *script = NULL;
bool found = false; bool found = false;
......
...@@ -12,13 +12,11 @@ ...@@ -12,13 +12,11 @@
#include "access/transam.h" #include "access/transam.h"
static void get_db_infos(DbInfoArr *dbinfos, static void get_db_infos(ClusterInfo *cluster);
Cluster whichCluster); static void dbarr_print(ClusterInfo *cluster);
static void dbarr_print(DbInfoArr *arr,
Cluster whichCluster);
static void relarr_print(RelInfoArr *arr); static void relarr_print(RelInfoArr *arr);
static void get_rel_infos(const DbInfo *dbinfo, static void get_rel_infos(ClusterInfo *cluster, const DbInfo *dbinfo,
RelInfoArr *relarr, Cluster whichCluster); RelInfoArr *relarr);
static void relarr_free(RelInfoArr *rel_arr); static void relarr_free(RelInfoArr *rel_arr);
static void map_rel(const RelInfo *oldrel, static void map_rel(const RelInfo *oldrel,
const RelInfo *newrel, const DbInfo *old_db, const RelInfo *newrel, const DbInfo *old_db,
...@@ -30,11 +28,10 @@ static void map_rel_by_id(Oid oldid, Oid newid, ...@@ -30,11 +28,10 @@ static void map_rel_by_id(Oid oldid, Oid newid,
const char *old_tablespace, const DbInfo *old_db, const char *old_tablespace, const DbInfo *old_db,
const DbInfo *new_db, const char *olddata, const DbInfo *new_db, const char *olddata,
const char *newdata, FileNameMap *map); const char *newdata, FileNameMap *map);
static RelInfo *relarr_lookup_reloid(RelInfoArr *rel_arr, static RelInfo *relarr_lookup_reloid(ClusterInfo *cluster, RelInfoArr *rel_arr,
Oid oid, Cluster whichCluster); Oid oid);
static RelInfo *relarr_lookup_rel(RelInfoArr *rel_arr, static RelInfo *relarr_lookup_rel(ClusterInfo *cluster, RelInfoArr *rel_arr,
const char *nspname, const char *relname, const char *nspname, const char *relname);
Cluster whichCluster);
/* /*
...@@ -66,8 +63,8 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db, ...@@ -66,8 +63,8 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db,
if (strcmp(newrel->nspname, "pg_toast") == 0) if (strcmp(newrel->nspname, "pg_toast") == 0)
continue; continue;
oldrel = relarr_lookup_rel(&old_db->rel_arr, newrel->nspname, oldrel = relarr_lookup_rel(&old_cluster, &old_db->rel_arr,
newrel->relname, CLUSTER_OLD); newrel->nspname, newrel->relname);
map_rel(oldrel, newrel, old_db, new_db, old_pgdata, new_pgdata, map_rel(oldrel, newrel, old_db, new_db, old_pgdata, new_pgdata,
maps + num_maps); maps + num_maps);
...@@ -91,10 +88,10 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db, ...@@ -91,10 +88,10 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db,
newrel->reloid); newrel->reloid);
/* look them up in their respective arrays */ /* look them up in their respective arrays */
old_toast = relarr_lookup_reloid(&old_db->rel_arr, old_toast = relarr_lookup_reloid(&old_cluster, &old_db->rel_arr,
oldrel->toastrelid, CLUSTER_OLD); oldrel->toastrelid);
new_toast = relarr_lookup_rel(&new_db->rel_arr, new_toast = relarr_lookup_rel(&new_cluster, &new_db->rel_arr,
"pg_toast", new_name, CLUSTER_NEW); "pg_toast", new_name);
/* finally create a mapping for them */ /* finally create a mapping for them */
map_rel(old_toast, new_toast, old_db, new_db, old_pgdata, new_pgdata, map_rel(old_toast, new_toast, old_db, new_db, old_pgdata, new_pgdata,
...@@ -118,10 +115,10 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db, ...@@ -118,10 +115,10 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db,
/* look them up in their respective arrays */ /* look them up in their respective arrays */
/* we lose our cache location here */ /* we lose our cache location here */
old_toast = relarr_lookup_rel(&old_db->rel_arr, old_toast = relarr_lookup_rel(&old_cluster, &old_db->rel_arr,
"pg_toast", old_name, CLUSTER_OLD); "pg_toast", old_name);
new_toast = relarr_lookup_rel(&new_db->rel_arr, new_toast = relarr_lookup_rel(&new_cluster, &new_db->rel_arr,
"pg_toast", new_name, CLUSTER_NEW); "pg_toast", new_name);
/* finally create a mapping for them */ /* finally create a mapping for them */
map_rel(old_toast, new_toast, old_db, new_db, old_pgdata, map_rel(old_toast, new_toast, old_db, new_db, old_pgdata,
...@@ -214,13 +211,13 @@ print_maps(FileNameMap *maps, int n, const char *dbName) ...@@ -214,13 +211,13 @@ print_maps(FileNameMap *maps, int n, const char *dbName)
/* /*
* get_db_infos() * get_db_infos()
* *
* Scans pg_database system catalog and returns (in dbinfs_arr) all user * Scans pg_database system catalog and populates all user
* databases. * databases.
*/ */
static void static void
get_db_infos(DbInfoArr *dbinfs_arr, Cluster whichCluster) get_db_infos(ClusterInfo *cluster)
{ {
PGconn *conn = connectToServer("template1", whichCluster); PGconn *conn = connectToServer(cluster, "template1");
PGresult *res; PGresult *res;
int ntups; int ntups;
int tupnum; int tupnum;
...@@ -256,8 +253,8 @@ get_db_infos(DbInfoArr *dbinfs_arr, Cluster whichCluster) ...@@ -256,8 +253,8 @@ get_db_infos(DbInfoArr *dbinfs_arr, Cluster whichCluster)
PQfinish(conn); PQfinish(conn);
dbinfs_arr->dbs = dbinfos; cluster->dbarr.dbs = dbinfos;
dbinfs_arr->ndbs = ntups; cluster->dbarr.ndbs = ntups;
} }
...@@ -268,18 +265,18 @@ get_db_infos(DbInfoArr *dbinfs_arr, Cluster whichCluster) ...@@ -268,18 +265,18 @@ get_db_infos(DbInfoArr *dbinfs_arr, Cluster whichCluster)
* on the given "port". Assumes that server is already running. * on the given "port". Assumes that server is already running.
*/ */
void void
get_db_and_rel_infos(DbInfoArr *db_arr, Cluster whichCluster) get_db_and_rel_infos(ClusterInfo *cluster)
{ {
int dbnum; int dbnum;
get_db_infos(db_arr, whichCluster); get_db_infos(cluster);
for (dbnum = 0; dbnum < db_arr->ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
get_rel_infos(&db_arr->dbs[dbnum], get_rel_infos(cluster, &cluster->dbarr.dbs[dbnum],
&db_arr->dbs[dbnum].rel_arr, whichCluster); &cluster->dbarr.dbs[dbnum].rel_arr);
if (log_opts.debug) if (log_opts.debug)
dbarr_print(db_arr, whichCluster); dbarr_print(cluster);
} }
...@@ -293,9 +290,9 @@ get_db_and_rel_infos(DbInfoArr *db_arr, Cluster whichCluster) ...@@ -293,9 +290,9 @@ get_db_and_rel_infos(DbInfoArr *db_arr, Cluster whichCluster)
* FirstNormalObjectId belongs to the user * FirstNormalObjectId belongs to the user
*/ */
static void static void
get_rel_infos(const DbInfo *dbinfo, RelInfoArr *relarr, Cluster whichCluster) get_rel_infos(ClusterInfo *cluster, const DbInfo *dbinfo, RelInfoArr *relarr)
{ {
PGconn *conn = connectToServer(dbinfo->db_name, whichCluster); PGconn *conn = connectToServer(cluster, dbinfo->db_name);
PGresult *res; PGresult *res;
RelInfo *relinfos; RelInfo *relinfos;
int ntups; int ntups;
...@@ -417,8 +414,8 @@ dbarr_lookup_db(DbInfoArr *db_arr, const char *db_name) ...@@ -417,8 +414,8 @@ dbarr_lookup_db(DbInfoArr *db_arr, const char *db_name)
* RelInfo structure. * RelInfo structure.
*/ */
static RelInfo * static RelInfo *
relarr_lookup_rel(RelInfoArr *rel_arr, const char *nspname, relarr_lookup_rel(ClusterInfo *cluster, RelInfoArr *rel_arr,
const char *relname, Cluster whichCluster) const char *nspname, const char *relname)
{ {
int relnum; int relnum;
...@@ -441,7 +438,7 @@ relarr_lookup_rel(RelInfoArr *rel_arr, const char *nspname, ...@@ -441,7 +438,7 @@ relarr_lookup_rel(RelInfoArr *rel_arr, const char *nspname,
} }
} }
pg_log(PG_FATAL, "Could not find %s.%s in %s cluster\n", pg_log(PG_FATAL, "Could not find %s.%s in %s cluster\n",
nspname, relname, CLUSTER_NAME(whichCluster)); nspname, relname, CLUSTER_NAME(cluster));
return NULL; return NULL;
} }
...@@ -454,8 +451,7 @@ relarr_lookup_rel(RelInfoArr *rel_arr, const char *nspname, ...@@ -454,8 +451,7 @@ relarr_lookup_rel(RelInfoArr *rel_arr, const char *nspname,
* found. * found.
*/ */
static RelInfo * static RelInfo *
relarr_lookup_reloid(RelInfoArr *rel_arr, Oid oid, relarr_lookup_reloid(ClusterInfo *cluster, RelInfoArr *rel_arr, Oid oid)
Cluster whichCluster)
{ {
int relnum; int relnum;
...@@ -465,7 +461,7 @@ relarr_lookup_reloid(RelInfoArr *rel_arr, Oid oid, ...@@ -465,7 +461,7 @@ relarr_lookup_reloid(RelInfoArr *rel_arr, Oid oid,
return &rel_arr->rels[relnum]; return &rel_arr->rels[relnum];
} }
pg_log(PG_FATAL, "Could not find %d in %s cluster\n", pg_log(PG_FATAL, "Could not find %d in %s cluster\n",
oid, CLUSTER_NAME(whichCluster)); oid, CLUSTER_NAME(cluster));
return NULL; return NULL;
} }
...@@ -491,16 +487,16 @@ dbarr_free(DbInfoArr *db_arr) ...@@ -491,16 +487,16 @@ dbarr_free(DbInfoArr *db_arr)
static void static void
dbarr_print(DbInfoArr *arr, Cluster whichCluster) dbarr_print(ClusterInfo *cluster)
{ {
int dbnum; int dbnum;
pg_log(PG_DEBUG, "%s databases\n", CLUSTER_NAME(whichCluster)); pg_log(PG_DEBUG, "%s databases\n", CLUSTER_NAME(cluster));
for (dbnum = 0; dbnum < arr->ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{ {
pg_log(PG_DEBUG, "Database: %s\n", arr->dbs[dbnum].db_name); pg_log(PG_DEBUG, "Database: %s\n", cluster->dbarr.dbs[dbnum].db_name);
relarr_print(&arr->dbs[dbnum].rel_arr); relarr_print(&cluster->dbarr.dbs[dbnum].rel_arr);
pg_log(PG_DEBUG, "\n\n"); pg_log(PG_DEBUG, "\n\n");
} }
} }
......
...@@ -22,8 +22,7 @@ static void set_frozenxids(void); ...@@ -22,8 +22,7 @@ static void set_frozenxids(void);
static void setup(char *argv0, bool live_check); static void setup(char *argv0, bool live_check);
static void cleanup(void); static void cleanup(void);
ClusterInfo old_cluster, ClusterInfo old_cluster, new_cluster;
new_cluster;
OSInfo os_info; OSInfo os_info;
int int
...@@ -46,7 +45,7 @@ main(int argc, char **argv) ...@@ -46,7 +45,7 @@ main(int argc, char **argv)
/* -- NEW -- */ /* -- NEW -- */
start_postmaster(CLUSTER_NEW, false); start_postmaster(&new_cluster, false);
check_new_cluster(); check_new_cluster();
report_clusters_compatible(); report_clusters_compatible();
...@@ -178,7 +177,7 @@ prepare_new_cluster(void) ...@@ -178,7 +177,7 @@ prepare_new_cluster(void)
new_cluster.bindir, new_cluster.port, os_info.user, log_opts.filename); new_cluster.bindir, new_cluster.port, os_info.user, log_opts.filename);
check_ok(); check_ok();
get_pg_database_relfilenode(CLUSTER_NEW); get_pg_database_relfilenode(&new_cluster);
} }
...@@ -186,7 +185,7 @@ static void ...@@ -186,7 +185,7 @@ static void
prepare_new_databases(void) prepare_new_databases(void)
{ {
/* -- NEW -- */ /* -- NEW -- */
start_postmaster(CLUSTER_NEW, false); start_postmaster(&new_cluster, false);
/* /*
* We set autovacuum_freeze_max_age to its maximum value so autovacuum * We set autovacuum_freeze_max_age to its maximum value so autovacuum
...@@ -210,7 +209,7 @@ prepare_new_databases(void) ...@@ -210,7 +209,7 @@ prepare_new_databases(void)
GLOBALS_DUMP_FILE, log_opts.filename); GLOBALS_DUMP_FILE, log_opts.filename);
check_ok(); check_ok();
get_db_and_rel_infos(&new_cluster.dbarr, CLUSTER_NEW); get_db_and_rel_infos(&new_cluster);
stop_postmaster(false, false); stop_postmaster(false, false);
} }
...@@ -220,7 +219,7 @@ static void ...@@ -220,7 +219,7 @@ static void
create_new_objects(void) create_new_objects(void)
{ {
/* -- NEW -- */ /* -- NEW -- */
start_postmaster(CLUSTER_NEW, false); start_postmaster(&new_cluster, false);
install_support_functions(); install_support_functions();
...@@ -235,7 +234,7 @@ create_new_objects(void) ...@@ -235,7 +234,7 @@ create_new_objects(void)
/* regenerate now that we have db schemas */ /* regenerate now that we have db schemas */
dbarr_free(&new_cluster.dbarr); dbarr_free(&new_cluster.dbarr);
get_db_and_rel_infos(&new_cluster.dbarr, CLUSTER_NEW); get_db_and_rel_infos(&new_cluster);
uninstall_support_functions(); uninstall_support_functions();
...@@ -309,7 +308,7 @@ set_frozenxids(void) ...@@ -309,7 +308,7 @@ set_frozenxids(void)
prep_status("Setting frozenxid counters in new cluster"); prep_status("Setting frozenxid counters in new cluster");
conn_template1 = connectToServer("template1", CLUSTER_NEW); conn_template1 = connectToServer(&new_cluster, "template1");
/* set pg_database.datfrozenxid */ /* set pg_database.datfrozenxid */
PQclear(executeQueryOrDie(conn_template1, PQclear(executeQueryOrDie(conn_template1,
...@@ -344,7 +343,7 @@ set_frozenxids(void) ...@@ -344,7 +343,7 @@ set_frozenxids(void)
"SET datallowconn = true " "SET datallowconn = true "
"WHERE datname = '%s'", datname)); "WHERE datname = '%s'", datname));
conn = connectToServer(datname, CLUSTER_NEW); conn = connectToServer(&new_cluster, datname);
/* set pg_class.relfrozenxid */ /* set pg_class.relfrozenxid */
PQclear(executeQueryOrDie(conn, PQclear(executeQueryOrDie(conn,
......
...@@ -52,9 +52,8 @@ ...@@ -52,9 +52,8 @@
#define EXE_EXT ".exe" #define EXE_EXT ".exe"
#endif #endif
#define CLUSTER_NAME(cluster) ((cluster) == CLUSTER_OLD ? "old" : "new") #define CLUSTER_NAME(cluster) ((cluster) == &old_cluster ? "old" : \
#define ACTIVE_CLUSTER(cluster) (((cluster) == CLUSTER_OLD) ? \ (cluster) == &new_cluster ? "new" : "none")
&old_cluster : &new_cluster)
#define atooid(x) ((Oid) strtoul((x), NULL, 10)) #define atooid(x) ((Oid) strtoul((x), NULL, 10))
...@@ -163,15 +162,6 @@ typedef enum ...@@ -163,15 +162,6 @@ typedef enum
PG_DEBUG PG_DEBUG
} eLogType; } eLogType;
/*
* Enumeration to distinguish between old cluster and new cluster
*/
typedef enum
{
NONE = 0, /* used for no running servers */
CLUSTER_OLD,
CLUSTER_NEW
} Cluster;
typedef long pgpid_t; typedef long pgpid_t;
...@@ -234,7 +224,7 @@ typedef struct ...@@ -234,7 +224,7 @@ typedef struct
char **libraries; /* loadable libraries */ char **libraries; /* loadable libraries */
int num_libraries; int num_libraries;
pgpid_t postmasterPID; /* PID of currently running postmaster */ pgpid_t postmasterPID; /* PID of currently running postmaster */
Cluster running_cluster; ClusterInfo *running_cluster;
} OSInfo; } OSInfo;
...@@ -243,8 +233,7 @@ typedef struct ...@@ -243,8 +233,7 @@ typedef struct
*/ */
extern LogOpts log_opts; extern LogOpts log_opts;
extern UserOpts user_opts; extern UserOpts user_opts;
extern ClusterInfo old_cluster, extern ClusterInfo old_cluster, new_cluster;
new_cluster;
extern OSInfo os_info; extern OSInfo os_info;
extern char scandir_file_pattern[]; extern char scandir_file_pattern[];
...@@ -339,8 +328,7 @@ void check_loadable_libraries(void); ...@@ -339,8 +328,7 @@ void check_loadable_libraries(void);
FileNameMap *gen_db_file_maps(DbInfo *old_db, FileNameMap *gen_db_file_maps(DbInfo *old_db,
DbInfo *new_db, int *nmaps, const char *old_pgdata, DbInfo *new_db, int *nmaps, const char *old_pgdata,
const char *new_pgdata); const char *new_pgdata);
void get_db_and_rel_infos(DbInfoArr *db_arr, void get_db_and_rel_infos(ClusterInfo *cluster);
Cluster whichCluster);
DbInfo *dbarr_lookup_db(DbInfoArr *db_arr, const char *db_name); DbInfo *dbarr_lookup_db(DbInfoArr *db_arr, const char *db_name);
void dbarr_free(DbInfoArr *db_arr); void dbarr_free(DbInfoArr *db_arr);
void print_maps(FileNameMap *maps, int n, void print_maps(FileNameMap *maps, int n,
...@@ -352,7 +340,7 @@ void parseCommandLine(int argc, char *argv[]); ...@@ -352,7 +340,7 @@ void parseCommandLine(int argc, char *argv[]);
/* relfilenode.c */ /* relfilenode.c */
void get_pg_database_relfilenode(Cluster whichCluster); void get_pg_database_relfilenode(ClusterInfo *cluster);
const char *transfer_all_new_dbs(DbInfoArr *olddb_arr, const char *transfer_all_new_dbs(DbInfoArr *olddb_arr,
DbInfoArr *newdb_arr, char *old_pgdata, char *new_pgdata); DbInfoArr *newdb_arr, char *old_pgdata, char *new_pgdata);
...@@ -364,14 +352,12 @@ void init_tablespaces(void); ...@@ -364,14 +352,12 @@ void init_tablespaces(void);
/* server.c */ /* server.c */
PGconn *connectToServer(const char *db_name, PGconn *connectToServer(ClusterInfo *cluster, const char *db_name);
Cluster whichCluster); PGresult *executeQueryOrDie(PGconn *conn, const char *fmt,...);
PGresult *executeQueryOrDie(PGconn *conn,
const char *fmt,...);
void start_postmaster(Cluster whichCluster, bool quiet); void start_postmaster(ClusterInfo *cluster, bool quiet);
void stop_postmaster(bool fast, bool quiet); void stop_postmaster(bool fast, bool quiet);
uint32 get_major_server_version(char **verstr, Cluster whichCluster); uint32 get_major_server_version(ClusterInfo *cluster, char **verstr);
void check_for_libpq_envvars(void); void check_for_libpq_envvars(void);
...@@ -394,17 +380,15 @@ unsigned int str2uint(const char *str); ...@@ -394,17 +380,15 @@ unsigned int str2uint(const char *str);
/* version.c */ /* version.c */
void new_9_0_populate_pg_largeobject_metadata( void new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster,
bool check_mode, Cluster whichCluster); bool check_mode);
/* version_old_8_3.c */ /* version_old_8_3.c */
void old_8_3_check_for_name_data_type_usage(Cluster whichCluster); void old_8_3_check_for_name_data_type_usage(ClusterInfo *cluster);
void old_8_3_check_for_tsquery_usage(Cluster whichCluster); void old_8_3_check_for_tsquery_usage(ClusterInfo *cluster);
void old_8_3_rebuild_tsvector_tables(bool check_mode, void old_8_3_rebuild_tsvector_tables(ClusterInfo *cluster, bool check_mode);
Cluster whichCluster); void old_8_3_invalidate_hash_gin_indexes(ClusterInfo *cluster, bool check_mode);
void old_8_3_invalidate_hash_gin_indexes(bool check_mode, void old_8_3_invalidate_bpchar_pattern_ops_indexes(ClusterInfo *cluster,
Cluster whichCluster); bool check_mode);
void old_8_3_invalidate_bpchar_pattern_ops_indexes(bool check_mode, char *old_8_3_create_sequence_script(ClusterInfo *cluster);
Cluster whichCluster);
char *old_8_3_create_sequence_script(Cluster whichCluster);
...@@ -77,10 +77,9 @@ transfer_all_new_dbs(DbInfoArr *olddb_arr, ...@@ -77,10 +77,9 @@ transfer_all_new_dbs(DbInfoArr *olddb_arr,
* relfilenodes later in the upgrade process. * relfilenodes later in the upgrade process.
*/ */
void void
get_pg_database_relfilenode(Cluster whichCluster) get_pg_database_relfilenode(ClusterInfo *cluster)
{ {
PGconn *conn = connectToServer("template1", whichCluster); PGconn *conn = connectToServer(cluster, "template1");
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
PGresult *res; PGresult *res;
int i_relfile; int i_relfile;
...@@ -94,7 +93,7 @@ get_pg_database_relfilenode(Cluster whichCluster) ...@@ -94,7 +93,7 @@ get_pg_database_relfilenode(Cluster whichCluster)
"ORDER BY c.relname"); "ORDER BY c.relname");
i_relfile = PQfnumber(res, "relfilenode"); i_relfile = PQfnumber(res, "relfilenode");
active_cluster->pg_database_oid = atooid(PQgetvalue(res, 0, i_relfile)); cluster->pg_database_oid = atooid(PQgetvalue(res, 0, i_relfile));
PQclear(res); PQclear(res);
PQfinish(conn); PQfinish(conn);
......
...@@ -15,8 +15,7 @@ ...@@ -15,8 +15,7 @@
static pgpid_t get_postmaster_pid(const char *datadir); static pgpid_t get_postmaster_pid(const char *datadir);
static bool test_server_conn(int timeout, static bool test_server_conn(ClusterInfo *cluster, int timeout);
Cluster whichCluster);
/* /*
...@@ -27,11 +26,9 @@ static bool test_server_conn(int timeout, ...@@ -27,11 +26,9 @@ static bool test_server_conn(int timeout,
* message and calls exit_nicely() to kill the program. * message and calls exit_nicely() to kill the program.
*/ */
PGconn * PGconn *
connectToServer(const char *db_name, connectToServer(ClusterInfo *cluster, const char *db_name)
Cluster whichCluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); unsigned short port = cluster->port;
unsigned short port = active_cluster->port;
char connectString[MAXPGPATH]; char connectString[MAXPGPATH];
PGconn *conn; PGconn *conn;
...@@ -132,10 +129,9 @@ get_postmaster_pid(const char *datadir) ...@@ -132,10 +129,9 @@ get_postmaster_pid(const char *datadir)
* is retrieved by reading the PG_VERSION file. * is retrieved by reading the PG_VERSION file.
*/ */
uint32 uint32
get_major_server_version(char **verstr, Cluster whichCluster) get_major_server_version(ClusterInfo *cluster, char **verstr)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); const char *datadir = cluster->pgdata;
const char *datadir = active_cluster->pgdata;
FILE *version_fd; FILE *version_fd;
char ver_file[MAXPGPATH]; char ver_file[MAXPGPATH];
int integer_version = 0; int integer_version = 0;
...@@ -160,17 +156,16 @@ get_major_server_version(char **verstr, Cluster whichCluster) ...@@ -160,17 +156,16 @@ get_major_server_version(char **verstr, Cluster whichCluster)
void void
start_postmaster(Cluster whichCluster, bool quiet) start_postmaster(ClusterInfo *cluster, bool quiet)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
char cmd[MAXPGPATH]; char cmd[MAXPGPATH];
const char *bindir; const char *bindir;
const char *datadir; const char *datadir;
unsigned short port; unsigned short port;
bindir = active_cluster->bindir; bindir = cluster->bindir;
datadir = active_cluster->pgdata; datadir = cluster->pgdata;
port = active_cluster->port; port = cluster->port;
/* /*
* On Win32, we can't send both pg_upgrade output and pg_ctl output to the * On Win32, we can't send both pg_upgrade output and pg_ctl output to the
...@@ -193,13 +188,13 @@ start_postmaster(Cluster whichCluster, bool quiet) ...@@ -193,13 +188,13 @@ start_postmaster(Cluster whichCluster, bool quiet)
/* wait for the server to start properly */ /* wait for the server to start properly */
if (test_server_conn(POSTMASTER_UPTIME, whichCluster) == false) if (test_server_conn(cluster, POSTMASTER_UPTIME) == false)
pg_log(PG_FATAL, " Unable to start %s postmaster with the command: %s\nPerhaps pg_hba.conf was not set to \"trust\".", pg_log(PG_FATAL, " Unable to start %s postmaster with the command: %s\nPerhaps pg_hba.conf was not set to \"trust\".",
CLUSTER_NAME(whichCluster), cmd); CLUSTER_NAME(cluster), cmd);
if ((os_info.postmasterPID = get_postmaster_pid(datadir)) == 0) if ((os_info.postmasterPID = get_postmaster_pid(datadir)) == 0)
pg_log(PG_FATAL, " Unable to get postmaster pid\n"); pg_log(PG_FATAL, " Unable to get postmaster pid\n");
os_info.running_cluster = whichCluster; os_info.running_cluster = cluster;
} }
...@@ -210,12 +205,12 @@ stop_postmaster(bool fast, bool quiet) ...@@ -210,12 +205,12 @@ stop_postmaster(bool fast, bool quiet)
const char *bindir; const char *bindir;
const char *datadir; const char *datadir;
if (os_info.running_cluster == CLUSTER_OLD) if (os_info.running_cluster == &old_cluster)
{ {
bindir = old_cluster.bindir; bindir = old_cluster.bindir;
datadir = old_cluster.pgdata; datadir = old_cluster.pgdata;
} }
else if (os_info.running_cluster == CLUSTER_NEW) else if (os_info.running_cluster == &new_cluster)
{ {
bindir = new_cluster.bindir; bindir = new_cluster.bindir;
datadir = new_cluster.pgdata; datadir = new_cluster.pgdata;
...@@ -236,7 +231,7 @@ stop_postmaster(bool fast, bool quiet) ...@@ -236,7 +231,7 @@ stop_postmaster(bool fast, bool quiet)
exec_prog(fast ? false : true, "%s", cmd); exec_prog(fast ? false : true, "%s", cmd);
os_info.postmasterPID = 0; os_info.postmasterPID = 0;
os_info.running_cluster = NONE; os_info.running_cluster = NULL;
} }
...@@ -250,10 +245,9 @@ stop_postmaster(bool fast, bool quiet) ...@@ -250,10 +245,9 @@ stop_postmaster(bool fast, bool quiet)
* Returns true if the connection attempt was successfull, false otherwise. * Returns true if the connection attempt was successfull, false otherwise.
*/ */
static bool static bool
test_server_conn(int timeout, Cluster whichCluster) test_server_conn(ClusterInfo *cluster, int timeout)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); unsigned short port = cluster->port;
unsigned short port = active_cluster->port;
PGconn *conn = NULL; PGconn *conn = NULL;
char con_opts[MAX_STRING]; char con_opts[MAX_STRING];
int tries; int tries;
...@@ -275,7 +269,7 @@ test_server_conn(int timeout, Cluster whichCluster) ...@@ -275,7 +269,7 @@ test_server_conn(int timeout, Cluster whichCluster)
if (tries == STARTUP_WARNING_TRIES) if (tries == STARTUP_WARNING_TRIES)
prep_status("Trying to start %s server ", prep_status("Trying to start %s server ",
CLUSTER_NAME(whichCluster)); CLUSTER_NAME(cluster));
else if (tries > STARTUP_WARNING_TRIES) else if (tries > STARTUP_WARNING_TRIES)
pg_log(PG_REPORT, "."); pg_log(PG_REPORT, ".");
} }
......
...@@ -10,8 +10,7 @@ ...@@ -10,8 +10,7 @@
#include "pg_upgrade.h" #include "pg_upgrade.h"
static void get_tablespace_paths(void); static void get_tablespace_paths(void);
static void set_tablespace_directory_suffix( static void set_tablespace_directory_suffix(ClusterInfo *cluster);
Cluster whichCluster);
void void
...@@ -19,8 +18,8 @@ init_tablespaces(void) ...@@ -19,8 +18,8 @@ init_tablespaces(void)
{ {
get_tablespace_paths(); get_tablespace_paths();
set_tablespace_directory_suffix(CLUSTER_OLD); set_tablespace_directory_suffix(&old_cluster);
set_tablespace_directory_suffix(CLUSTER_NEW); set_tablespace_directory_suffix(&new_cluster);
if (os_info.num_tablespaces > 0 && if (os_info.num_tablespaces > 0 &&
strcmp(old_cluster.tablespace_suffix, new_cluster.tablespace_suffix) == 0) strcmp(old_cluster.tablespace_suffix, new_cluster.tablespace_suffix) == 0)
...@@ -39,7 +38,7 @@ init_tablespaces(void) ...@@ -39,7 +38,7 @@ init_tablespaces(void)
static void static void
get_tablespace_paths(void) get_tablespace_paths(void)
{ {
PGconn *conn = connectToServer("template1", CLUSTER_OLD); PGconn *conn = connectToServer(&old_cluster, "template1");
PGresult *res; PGresult *res;
int tblnum; int tblnum;
int i_spclocation; int i_spclocation;
...@@ -71,21 +70,19 @@ get_tablespace_paths(void) ...@@ -71,21 +70,19 @@ get_tablespace_paths(void)
static void static void
set_tablespace_directory_suffix(Cluster whichCluster) set_tablespace_directory_suffix(ClusterInfo *cluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); if (GET_MAJOR_VERSION(cluster->major_version) <= 804)
cluster->tablespace_suffix = pg_strdup("");
if (GET_MAJOR_VERSION(active_cluster->major_version) <= 804)
active_cluster->tablespace_suffix = pg_strdup("");
else else
{ {
/* This cluster has a version-specific subdirectory */ /* This cluster has a version-specific subdirectory */
active_cluster->tablespace_suffix = pg_malloc(4 + cluster->tablespace_suffix = pg_malloc(4 +
strlen(active_cluster->major_version_str) + strlen(cluster->major_version_str) +
10 /* OIDCHARS */ + 1); 10 /* OIDCHARS */ + 1);
/* The leading slash is needed to start a new directory. */ /* The leading slash is needed to start a new directory. */
sprintf(active_cluster->tablespace_suffix, "/PG_%s_%d", active_cluster->major_version_str, sprintf(cluster->tablespace_suffix, "/PG_%s_%d", cluster->major_version_str,
active_cluster->controldata.cat_ver); cluster->controldata.cat_ver);
} }
} }
...@@ -18,10 +18,8 @@ ...@@ -18,10 +18,8 @@
* 9.0 has a new pg_largeobject permission table * 9.0 has a new pg_largeobject permission table
*/ */
void void
new_9_0_populate_pg_largeobject_metadata(bool check_mode, new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster, bool check_mode)
Cluster whichCluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
int dbnum; int dbnum;
FILE *script = NULL; FILE *script = NULL;
bool found = false; bool found = false;
...@@ -32,12 +30,12 @@ new_9_0_populate_pg_largeobject_metadata(bool check_mode, ...@@ -32,12 +30,12 @@ new_9_0_populate_pg_largeobject_metadata(bool check_mode,
snprintf(output_path, sizeof(output_path), "%s/pg_largeobject.sql", snprintf(output_path, sizeof(output_path), "%s/pg_largeobject.sql",
os_info.cwd); os_info.cwd);
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{ {
PGresult *res; PGresult *res;
int i_count; int i_count;
DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; DbInfo *active_db = &cluster->dbarr.dbs[dbnum];
PGconn *conn = connectToServer(active_db->db_name, whichCluster); PGconn *conn = connectToServer(cluster, active_db->db_name);
/* find if there are any large objects */ /* find if there are any large objects */
res = executeQueryOrDie(conn, res = executeQueryOrDie(conn,
......
...@@ -19,9 +19,8 @@ ...@@ -19,9 +19,8 @@
* checks tables and indexes. * checks tables and indexes.
*/ */
void void
old_8_3_check_for_name_data_type_usage(Cluster whichCluster) old_8_3_check_for_name_data_type_usage(ClusterInfo *cluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
int dbnum; int dbnum;
FILE *script = NULL; FILE *script = NULL;
bool found = false; bool found = false;
...@@ -32,7 +31,7 @@ old_8_3_check_for_name_data_type_usage(Cluster whichCluster) ...@@ -32,7 +31,7 @@ old_8_3_check_for_name_data_type_usage(Cluster whichCluster)
snprintf(output_path, sizeof(output_path), "%s/tables_using_name.txt", snprintf(output_path, sizeof(output_path), "%s/tables_using_name.txt",
os_info.cwd); os_info.cwd);
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{ {
PGresult *res; PGresult *res;
bool db_used = false; bool db_used = false;
...@@ -41,8 +40,8 @@ old_8_3_check_for_name_data_type_usage(Cluster whichCluster) ...@@ -41,8 +40,8 @@ old_8_3_check_for_name_data_type_usage(Cluster whichCluster)
int i_nspname, int i_nspname,
i_relname, i_relname,
i_attname; i_attname;
DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; DbInfo *active_db = &cluster->dbarr.dbs[dbnum];
PGconn *conn = connectToServer(active_db->db_name, whichCluster); PGconn *conn = connectToServer(cluster, active_db->db_name);
/* /*
* With a smaller alignment in 8.4, 'name' cannot be used in a * With a smaller alignment in 8.4, 'name' cannot be used in a
...@@ -113,9 +112,8 @@ old_8_3_check_for_name_data_type_usage(Cluster whichCluster) ...@@ -113,9 +112,8 @@ old_8_3_check_for_name_data_type_usage(Cluster whichCluster)
* so upgrading of such fields is impossible. * so upgrading of such fields is impossible.
*/ */
void void
old_8_3_check_for_tsquery_usage(Cluster whichCluster) old_8_3_check_for_tsquery_usage(ClusterInfo *cluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
int dbnum; int dbnum;
FILE *script = NULL; FILE *script = NULL;
bool found = false; bool found = false;
...@@ -126,7 +124,7 @@ old_8_3_check_for_tsquery_usage(Cluster whichCluster) ...@@ -126,7 +124,7 @@ old_8_3_check_for_tsquery_usage(Cluster whichCluster)
snprintf(output_path, sizeof(output_path), "%s/tables_using_tsquery.txt", snprintf(output_path, sizeof(output_path), "%s/tables_using_tsquery.txt",
os_info.cwd); os_info.cwd);
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{ {
PGresult *res; PGresult *res;
bool db_used = false; bool db_used = false;
...@@ -135,8 +133,8 @@ old_8_3_check_for_tsquery_usage(Cluster whichCluster) ...@@ -135,8 +133,8 @@ old_8_3_check_for_tsquery_usage(Cluster whichCluster)
int i_nspname, int i_nspname,
i_relname, i_relname,
i_attname; i_attname;
DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; DbInfo *active_db = &cluster->dbarr.dbs[dbnum];
PGconn *conn = connectToServer(active_db->db_name, whichCluster); PGconn *conn = connectToServer(cluster, active_db->db_name);
/* Find any user-defined tsquery columns */ /* Find any user-defined tsquery columns */
res = executeQueryOrDie(conn, res = executeQueryOrDie(conn,
...@@ -208,10 +206,8 @@ old_8_3_check_for_tsquery_usage(Cluster whichCluster) ...@@ -208,10 +206,8 @@ old_8_3_check_for_tsquery_usage(Cluster whichCluster)
* 'c' 'bb' 'aaa' -- 8.3 * 'c' 'bb' 'aaa' -- 8.3
*/ */
void void
old_8_3_rebuild_tsvector_tables(bool check_mode, old_8_3_rebuild_tsvector_tables(ClusterInfo *cluster, bool check_mode)
Cluster whichCluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
int dbnum; int dbnum;
FILE *script = NULL; FILE *script = NULL;
bool found = false; bool found = false;
...@@ -222,7 +218,7 @@ old_8_3_rebuild_tsvector_tables(bool check_mode, ...@@ -222,7 +218,7 @@ old_8_3_rebuild_tsvector_tables(bool check_mode,
snprintf(output_path, sizeof(output_path), "%s/rebuild_tsvector_tables.sql", snprintf(output_path, sizeof(output_path), "%s/rebuild_tsvector_tables.sql",
os_info.cwd); os_info.cwd);
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{ {
PGresult *res; PGresult *res;
bool db_used = false; bool db_used = false;
...@@ -233,8 +229,8 @@ old_8_3_rebuild_tsvector_tables(bool check_mode, ...@@ -233,8 +229,8 @@ old_8_3_rebuild_tsvector_tables(bool check_mode,
int i_nspname, int i_nspname,
i_relname, i_relname,
i_attname; i_attname;
DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; DbInfo *active_db = &cluster->dbarr.dbs[dbnum];
PGconn *conn = connectToServer(active_db->db_name, whichCluster); PGconn *conn = connectToServer(cluster, active_db->db_name);
/* Find any user-defined tsvector columns */ /* Find any user-defined tsvector columns */
res = executeQueryOrDie(conn, res = executeQueryOrDie(conn,
...@@ -352,10 +348,8 @@ old_8_3_rebuild_tsvector_tables(bool check_mode, ...@@ -352,10 +348,8 @@ old_8_3_rebuild_tsvector_tables(bool check_mode,
* Hash, Gin, and GiST index binary format has changes from 8.3->8.4 * Hash, Gin, and GiST index binary format has changes from 8.3->8.4
*/ */
void void
old_8_3_invalidate_hash_gin_indexes(bool check_mode, old_8_3_invalidate_hash_gin_indexes(ClusterInfo *cluster, bool check_mode)
Cluster whichCluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
int dbnum; int dbnum;
FILE *script = NULL; FILE *script = NULL;
bool found = false; bool found = false;
...@@ -366,7 +360,7 @@ old_8_3_invalidate_hash_gin_indexes(bool check_mode, ...@@ -366,7 +360,7 @@ old_8_3_invalidate_hash_gin_indexes(bool check_mode,
snprintf(output_path, sizeof(output_path), "%s/reindex_hash_and_gin.sql", snprintf(output_path, sizeof(output_path), "%s/reindex_hash_and_gin.sql",
os_info.cwd); os_info.cwd);
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{ {
PGresult *res; PGresult *res;
bool db_used = false; bool db_used = false;
...@@ -374,8 +368,8 @@ old_8_3_invalidate_hash_gin_indexes(bool check_mode, ...@@ -374,8 +368,8 @@ old_8_3_invalidate_hash_gin_indexes(bool check_mode,
int rowno; int rowno;
int i_nspname, int i_nspname,
i_relname; i_relname;
DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; DbInfo *active_db = &cluster->dbarr.dbs[dbnum];
PGconn *conn = connectToServer(active_db->db_name, whichCluster); PGconn *conn = connectToServer(cluster, active_db->db_name);
/* find hash and gin indexes */ /* find hash and gin indexes */
res = executeQueryOrDie(conn, res = executeQueryOrDie(conn,
...@@ -467,10 +461,9 @@ old_8_3_invalidate_hash_gin_indexes(bool check_mode, ...@@ -467,10 +461,9 @@ old_8_3_invalidate_hash_gin_indexes(bool check_mode,
* 8.4 bpchar_pattern_ops no longer sorts based on trailing spaces * 8.4 bpchar_pattern_ops no longer sorts based on trailing spaces
*/ */
void void
old_8_3_invalidate_bpchar_pattern_ops_indexes(bool check_mode, old_8_3_invalidate_bpchar_pattern_ops_indexes(ClusterInfo *cluster,
Cluster whichCluster) bool check_mode)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
int dbnum; int dbnum;
FILE *script = NULL; FILE *script = NULL;
bool found = false; bool found = false;
...@@ -481,7 +474,7 @@ old_8_3_invalidate_bpchar_pattern_ops_indexes(bool check_mode, ...@@ -481,7 +474,7 @@ old_8_3_invalidate_bpchar_pattern_ops_indexes(bool check_mode,
snprintf(output_path, sizeof(output_path), "%s/reindex_bpchar_ops.sql", snprintf(output_path, sizeof(output_path), "%s/reindex_bpchar_ops.sql",
os_info.cwd); os_info.cwd);
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{ {
PGresult *res; PGresult *res;
bool db_used = false; bool db_used = false;
...@@ -489,8 +482,8 @@ old_8_3_invalidate_bpchar_pattern_ops_indexes(bool check_mode, ...@@ -489,8 +482,8 @@ old_8_3_invalidate_bpchar_pattern_ops_indexes(bool check_mode,
int rowno; int rowno;
int i_nspname, int i_nspname,
i_relname; i_relname;
DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; DbInfo *active_db = &cluster->dbarr.dbs[dbnum];
PGconn *conn = connectToServer(active_db->db_name, whichCluster); PGconn *conn = connectToServer(cluster, active_db->db_name);
/* find bpchar_pattern_ops indexes */ /* find bpchar_pattern_ops indexes */
...@@ -602,9 +595,8 @@ old_8_3_invalidate_bpchar_pattern_ops_indexes(bool check_mode, ...@@ -602,9 +595,8 @@ old_8_3_invalidate_bpchar_pattern_ops_indexes(bool check_mode,
* server, even in link mode. * server, even in link mode.
*/ */
char * char *
old_8_3_create_sequence_script(Cluster whichCluster) old_8_3_create_sequence_script(ClusterInfo *cluster)
{ {
ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster);
int dbnum; int dbnum;
FILE *script = NULL; FILE *script = NULL;
bool found = false; bool found = false;
...@@ -614,7 +606,7 @@ old_8_3_create_sequence_script(Cluster whichCluster) ...@@ -614,7 +606,7 @@ old_8_3_create_sequence_script(Cluster whichCluster)
prep_status("Creating script to adjust sequences"); prep_status("Creating script to adjust sequences");
for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{ {
PGresult *res; PGresult *res;
bool db_used = false; bool db_used = false;
...@@ -622,8 +614,8 @@ old_8_3_create_sequence_script(Cluster whichCluster) ...@@ -622,8 +614,8 @@ old_8_3_create_sequence_script(Cluster whichCluster)
int rowno; int rowno;
int i_nspname, int i_nspname,
i_relname; i_relname;
DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; DbInfo *active_db = &cluster->dbarr.dbs[dbnum];
PGconn *conn = connectToServer(active_db->db_name, whichCluster); PGconn *conn = connectToServer(cluster, active_db->db_name);
/* Find any sequences */ /* Find any sequences */
res = executeQueryOrDie(conn, res = executeQueryOrDie(conn,
......
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