commit 6e6bee987ff4b6d650eec9f20fd477269d95e295 Author: Bruce Momjian Date: Sat Jan 1 12:06:36 2011 -0500 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. diff --git a/contrib/pg_upgrade/check.c b/contrib/pg_upgrade/check.c index 6d5111c..839a3c9 100644 *** /tmp/jfuWAe_check.c Wed Jan 5 09:04:02 2011 --- /tmp/RmpcZc_check.c Wed Jan 5 09:04:02 2011 *************** *** 10,22 **** #include "pg_upgrade.h" ! static void set_locale_and_encoding(Cluster whichCluster); static void check_new_db_is_empty(void); static void check_locale_and_encoding(ControlData *oldctrl, ControlData *newctrl); ! static void check_for_isn_and_int8_passing_mismatch( ! Cluster whichCluster); ! static void check_for_reg_data_type_usage(Cluster whichCluster); void --- 10,21 ---- #include "pg_upgrade.h" ! static void set_locale_and_encoding(ClusterInfo *cluster); static void check_new_db_is_empty(void); static void check_locale_and_encoding(ControlData *oldctrl, ControlData *newctrl); ! static void check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster); ! static void check_for_reg_data_type_usage(ClusterInfo *cluster); void *************** check_old_cluster(bool live_check, *** 46,59 **** /* -- OLD -- */ if (!live_check) ! start_postmaster(CLUSTER_OLD, false); ! set_locale_and_encoding(CLUSTER_OLD); ! get_pg_database_relfilenode(CLUSTER_OLD); /* Extract a list of databases and tables from the old cluster */ ! get_db_and_rel_infos(&old_cluster.dbarr, CLUSTER_OLD); init_tablespaces(); --- 45,58 ---- /* -- OLD -- */ if (!live_check) ! start_postmaster(&old_cluster, false); ! set_locale_and_encoding(&old_cluster); ! get_pg_database_relfilenode(&old_cluster); /* Extract a list of databases and tables from the old cluster */ ! get_db_and_rel_infos(&old_cluster); init_tablespaces(); *************** check_old_cluster(bool live_check, *** 64,82 **** * Check for various failure cases */ ! check_for_reg_data_type_usage(CLUSTER_OLD); ! check_for_isn_and_int8_passing_mismatch(CLUSTER_OLD); /* old = PG 8.3 checks? */ 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_tsquery_usage(CLUSTER_OLD); if (user_opts.check) { ! old_8_3_rebuild_tsvector_tables(true, CLUSTER_OLD); ! old_8_3_invalidate_hash_gin_indexes(true, CLUSTER_OLD); ! old_8_3_invalidate_bpchar_pattern_ops_indexes(true, CLUSTER_OLD); } else --- 63,81 ---- * Check for various failure cases */ ! check_for_reg_data_type_usage(&old_cluster); ! check_for_isn_and_int8_passing_mismatch(&old_cluster); /* old = PG 8.3 checks? */ if (GET_MAJOR_VERSION(old_cluster.major_version) <= 803) { ! old_8_3_check_for_name_data_type_usage(&old_cluster); ! old_8_3_check_for_tsquery_usage(&old_cluster); if (user_opts.check) { ! old_8_3_rebuild_tsvector_tables(&old_cluster, true); ! old_8_3_invalidate_hash_gin_indexes(&old_cluster, true); ! old_8_3_invalidate_bpchar_pattern_ops_indexes(&old_cluster, true); } else *************** check_old_cluster(bool live_check, *** 86,97 **** * end. */ *sequence_script_file_name = ! old_8_3_create_sequence_script(CLUSTER_OLD); } /* Pre-PG 9.0 had no large object permissions */ if (GET_MAJOR_VERSION(old_cluster.major_version) <= 804) ! new_9_0_populate_pg_largeobject_metadata(true, CLUSTER_OLD); /* * While not a check option, we do this now because this is the only time --- 85,96 ---- * end. */ *sequence_script_file_name = ! old_8_3_create_sequence_script(&old_cluster); } /* Pre-PG 9.0 had no large object permissions */ if (GET_MAJOR_VERSION(old_cluster.major_version) <= 804) ! 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 *************** check_old_cluster(bool live_check, *** 111,117 **** void check_new_cluster(void) { ! set_locale_and_encoding(CLUSTER_NEW); check_new_db_is_empty(); --- 110,116 ---- void check_new_cluster(void) { ! set_locale_and_encoding(&new_cluster); check_new_db_is_empty(); *************** issue_warnings(char *sequence_script_fil *** 149,155 **** /* old = PG 8.3 warnings? */ if (GET_MAJOR_VERSION(old_cluster.major_version) <= 803) { ! start_postmaster(CLUSTER_NEW, true); /* restore proper sequence values using file created from old server */ if (sequence_script_file_name) --- 148,154 ---- /* old = PG 8.3 warnings? */ if (GET_MAJOR_VERSION(old_cluster.major_version) <= 803) { ! start_postmaster(&new_cluster, true); /* restore proper sequence values using file created from old server */ if (sequence_script_file_name) *************** issue_warnings(char *sequence_script_fil *** 165,181 **** check_ok(); } ! old_8_3_rebuild_tsvector_tables(false, CLUSTER_NEW); ! old_8_3_invalidate_hash_gin_indexes(false, CLUSTER_NEW); ! old_8_3_invalidate_bpchar_pattern_ops_indexes(false, CLUSTER_NEW); stop_postmaster(false, true); } /* Create dummy large object permissions for old < PG 9.0? */ if (GET_MAJOR_VERSION(old_cluster.major_version) <= 804) { ! start_postmaster(CLUSTER_NEW, true); ! new_9_0_populate_pg_largeobject_metadata(false, CLUSTER_NEW); stop_postmaster(false, true); } } --- 164,180 ---- check_ok(); } ! old_8_3_rebuild_tsvector_tables(&new_cluster, false); ! old_8_3_invalidate_hash_gin_indexes(&new_cluster, false); ! old_8_3_invalidate_bpchar_pattern_ops_indexes(&new_cluster, false); stop_postmaster(false, true); } /* Create dummy large object permissions for old < PG 9.0? */ if (GET_MAJOR_VERSION(old_cluster.major_version) <= 804) { ! start_postmaster(&new_cluster, true); ! new_9_0_populate_pg_largeobject_metadata(&new_cluster, false); stop_postmaster(false, true); } } *************** void *** 210,217 **** check_cluster_versions(void) { /* get old and new cluster versions */ ! old_cluster.major_version = get_major_server_version(&old_cluster.major_version_str, CLUSTER_OLD); ! new_cluster.major_version = get_major_server_version(&new_cluster.major_version_str, CLUSTER_NEW); /* We allow upgrades from/to the same major version for alpha/beta upgrades */ --- 209,216 ---- check_cluster_versions(void) { /* get old and new cluster versions */ ! 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, &new_cluster.major_version_str); /* We allow upgrades from/to the same major version for alpha/beta upgrades */ *************** check_cluster_compatibility(bool live_ch *** 270,285 **** * query the database to get the template0 locale */ static void ! set_locale_and_encoding(Cluster whichCluster) { ! ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); ! ControlData *ctrl = &active_cluster->controldata; PGconn *conn; PGresult *res; int i_encoding; ! int cluster_version = active_cluster->major_version; ! conn = connectToServer("template1", whichCluster); /* for pg < 80400, we got the values from pg_controldata */ if (cluster_version >= 80400) --- 269,283 ---- * query the database to get the template0 locale */ static void ! set_locale_and_encoding(ClusterInfo *cluster) { ! ControlData *ctrl = &cluster->controldata; PGconn *conn; PGresult *res; int i_encoding; ! int cluster_version = cluster->major_version; ! conn = connectToServer(cluster, "template1"); /* for pg < 80400, we got the values from pg_controldata */ if (cluster_version >= 80400) *************** check_new_db_is_empty(void) *** 345,351 **** int dbnum; bool found = false; ! get_db_and_rel_infos(&new_cluster.dbarr, CLUSTER_NEW); for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++) { --- 343,349 ---- int dbnum; bool found = false; ! get_db_and_rel_infos(&new_cluster); for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++) { *************** create_script_for_old_cluster_deletion( *** 457,465 **** * it must match for the old and new servers. */ void ! check_for_isn_and_int8_passing_mismatch(Cluster whichCluster) { - ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); int dbnum; FILE *script = NULL; bool found = false; --- 455,462 ---- * it must match for the old and new servers. */ void ! check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster) { int dbnum; FILE *script = NULL; bool found = false; *************** check_for_isn_and_int8_passing_mismatch( *** 478,484 **** snprintf(output_path, sizeof(output_path), "%s/contrib_isn_and_int8_pass_by_value.txt", os_info.cwd); ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; --- 475,481 ---- snprintf(output_path, sizeof(output_path), "%s/contrib_isn_and_int8_pass_by_value.txt", os_info.cwd); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; *************** check_for_isn_and_int8_passing_mismatch( *** 486,493 **** int rowno; int i_nspname, i_proname; ! DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(active_db->db_name, whichCluster); /* Find any functions coming from contrib/isn */ res = executeQueryOrDie(conn, --- 483,490 ---- int rowno; int i_nspname, i_proname; ! DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(cluster, active_db->db_name); /* Find any functions coming from contrib/isn */ res = executeQueryOrDie(conn, *************** check_for_isn_and_int8_passing_mismatch( *** 552,560 **** * tables upgraded by pg_upgrade. */ void ! check_for_reg_data_type_usage(Cluster whichCluster) { - ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); int dbnum; FILE *script = NULL; bool found = false; --- 549,556 ---- * tables upgraded by pg_upgrade. */ void ! check_for_reg_data_type_usage(ClusterInfo *cluster) { int dbnum; FILE *script = NULL; bool found = false; *************** check_for_reg_data_type_usage(Cluster wh *** 565,571 **** snprintf(output_path, sizeof(output_path), "%s/tables_using_reg.txt", os_info.cwd); ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; --- 561,567 ---- snprintf(output_path, sizeof(output_path), "%s/tables_using_reg.txt", os_info.cwd); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; *************** check_for_reg_data_type_usage(Cluster wh *** 574,581 **** int i_nspname, i_relname, i_attname; ! DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(active_db->db_name, whichCluster); res = executeQueryOrDie(conn, "SELECT n.nspname, c.relname, a.attname " --- 570,577 ---- int i_nspname, i_relname, i_attname; ! DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(cluster, active_db->db_name); res = executeQueryOrDie(conn, "SELECT n.nspname, c.relname, a.attname " diff --git a/contrib/pg_upgrade/exec.c b/contrib/pg_upgrade/exec.c index af0fcf9..1959b8a 100644 *** /tmp/c4HFhd_exec.c Wed Jan 5 09:04:03 2011 --- /tmp/SVwHBd_exec.c Wed Jan 5 09:04:03 2011 *************** *** 14,20 **** static void check_data_dir(const char *pg_data); ! static void check_bin_dir(ClusterInfo *cluster, Cluster whichCluster); static int check_exec(const char *dir, const char *cmdName); static const char *validate_exec(const char *path); --- 14,20 ---- static void check_data_dir(const char *pg_data); ! static void check_bin_dir(ClusterInfo *cluster); static int check_exec(const char *dir, const char *cmdName); static const char *validate_exec(const char *path); *************** verify_directories(void) *** 99,105 **** check_ok(); prep_status("Checking old bin directory (%s)", old_cluster.bindir); ! check_bin_dir(&old_cluster, CLUSTER_OLD); check_ok(); prep_status("Checking new data directory (%s)", new_cluster.pgdata); --- 99,105 ---- check_ok(); prep_status("Checking old bin directory (%s)", old_cluster.bindir); ! check_bin_dir(&old_cluster); check_ok(); prep_status("Checking new data directory (%s)", new_cluster.pgdata); *************** verify_directories(void) *** 107,113 **** check_ok(); prep_status("Checking new bin directory (%s)", new_cluster.bindir); ! check_bin_dir(&new_cluster, CLUSTER_NEW); check_ok(); } --- 107,113 ---- check_ok(); prep_status("Checking new bin directory (%s)", new_cluster.bindir); ! check_bin_dir(&new_cluster); check_ok(); } *************** check_data_dir(const char *pg_data) *** 158,169 **** * exit(). */ static void ! check_bin_dir(ClusterInfo *cluster, Cluster whichCluster) { check_exec(cluster->bindir, "postgres"); check_exec(cluster->bindir, "pg_ctl"); check_exec(cluster->bindir, "pg_resetxlog"); ! if (whichCluster == CLUSTER_NEW) { /* these are only needed in the new cluster */ check_exec(cluster->bindir, "pg_config"); --- 158,169 ---- * exit(). */ static void ! check_bin_dir(ClusterInfo *cluster) { check_exec(cluster->bindir, "postgres"); check_exec(cluster->bindir, "pg_ctl"); check_exec(cluster->bindir, "pg_resetxlog"); ! if (cluster == &new_cluster) { /* these are only needed in the new cluster */ check_exec(cluster->bindir, "pg_config"); diff --git a/contrib/pg_upgrade/function.c b/contrib/pg_upgrade/function.c index c76aaeb..877b004 100644 *** /tmp/kQEsXa_function.c Wed Jan 5 09:04:03 2011 --- /tmp/gaM4hb_function.c Wed Jan 5 09:04:03 2011 *************** install_support_functions(void) *** 28,34 **** for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++) { DbInfo *newdb = &new_cluster.dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(newdb->db_name, CLUSTER_NEW); /* suppress NOTICE of dropped objects */ PQclear(executeQueryOrDie(conn, --- 28,34 ---- for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++) { DbInfo *newdb = &new_cluster.dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(&new_cluster, newdb->db_name); /* suppress NOTICE of dropped objects */ PQclear(executeQueryOrDie(conn, *************** uninstall_support_functions(void) *** 99,105 **** for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++) { DbInfo *newdb = &new_cluster.dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(newdb->db_name, CLUSTER_NEW); /* suppress NOTICE of dropped objects */ PQclear(executeQueryOrDie(conn, --- 99,105 ---- for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++) { DbInfo *newdb = &new_cluster.dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(&new_cluster, newdb->db_name); /* suppress NOTICE of dropped objects */ PQclear(executeQueryOrDie(conn, *************** uninstall_support_functions(void) *** 123,142 **** void get_loadable_libraries(void) { - ClusterInfo *active_cluster = &old_cluster; PGresult **ress; int totaltups; int dbnum; ress = (PGresult **) ! pg_malloc(active_cluster->dbarr.ndbs * sizeof(PGresult *)); totaltups = 0; /* Fetch all library names, removing duplicates within each DB */ ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { ! DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(active_db->db_name, CLUSTER_OLD); /* Fetch all libraries referenced in this DB */ ress[dbnum] = executeQueryOrDie(conn, --- 123,141 ---- void get_loadable_libraries(void) { PGresult **ress; int totaltups; int dbnum; ress = (PGresult **) ! pg_malloc(old_cluster.dbarr.ndbs * sizeof(PGresult *)); totaltups = 0; /* Fetch all library names, removing duplicates within each DB */ ! for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++) { ! DbInfo *active_db = &old_cluster.dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(&old_cluster, active_db->db_name); /* Fetch all libraries referenced in this DB */ ress[dbnum] = executeQueryOrDie(conn, *************** get_loadable_libraries(void) *** 163,169 **** */ totaltups = 0; ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { PGresult *res = ress[dbnum]; int ntups; --- 162,168 ---- */ totaltups = 0; ! for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++) { PGresult *res = ress[dbnum]; int ntups; *************** get_loadable_libraries(void) *** 207,213 **** void check_loadable_libraries(void) { ! PGconn *conn = connectToServer("template1", CLUSTER_NEW); int libnum; FILE *script = NULL; bool found = false; --- 206,212 ---- void check_loadable_libraries(void) { ! PGconn *conn = connectToServer(&new_cluster, "template1"); int libnum; FILE *script = NULL; bool found = false; diff --git a/contrib/pg_upgrade/info.c b/contrib/pg_upgrade/info.c index 99a1548..e44798a 100644 *** /tmp/eLhpRb_info.c Wed Jan 5 09:04:03 2011 --- /tmp/uNYs5b_info.c Wed Jan 5 09:04:03 2011 *************** *** 12,24 **** #include "access/transam.h" ! static void get_db_infos(DbInfoArr *dbinfos, ! Cluster whichCluster); ! static void dbarr_print(DbInfoArr *arr, ! Cluster whichCluster); static void relarr_print(RelInfoArr *arr); ! static void get_rel_infos(const DbInfo *dbinfo, ! RelInfoArr *relarr, Cluster whichCluster); static void relarr_free(RelInfoArr *rel_arr); static void map_rel(const RelInfo *oldrel, const RelInfo *newrel, const DbInfo *old_db, --- 12,22 ---- #include "access/transam.h" ! static void get_db_infos(ClusterInfo *cluster); ! static void dbarr_print(ClusterInfo *cluster); static void relarr_print(RelInfoArr *arr); ! static void get_rel_infos(ClusterInfo *cluster, const DbInfo *dbinfo, ! RelInfoArr *relarr); static void relarr_free(RelInfoArr *rel_arr); static void map_rel(const RelInfo *oldrel, const RelInfo *newrel, const DbInfo *old_db, *************** static void map_rel_by_id(Oid oldid, Oid *** 30,40 **** const char *old_tablespace, const DbInfo *old_db, const DbInfo *new_db, const char *olddata, const char *newdata, FileNameMap *map); ! static RelInfo *relarr_lookup_reloid(RelInfoArr *rel_arr, ! Oid oid, Cluster whichCluster); ! static RelInfo *relarr_lookup_rel(RelInfoArr *rel_arr, ! const char *nspname, const char *relname, ! Cluster whichCluster); /* --- 28,37 ---- const char *old_tablespace, const DbInfo *old_db, const DbInfo *new_db, const char *olddata, const char *newdata, FileNameMap *map); ! static RelInfo *relarr_lookup_reloid(ClusterInfo *cluster, RelInfoArr *rel_arr, ! Oid oid); ! static RelInfo *relarr_lookup_rel(ClusterInfo *cluster, RelInfoArr *rel_arr, ! const char *nspname, const char *relname); /* *************** gen_db_file_maps(DbInfo *old_db, DbInfo *** 66,73 **** if (strcmp(newrel->nspname, "pg_toast") == 0) continue; ! oldrel = relarr_lookup_rel(&old_db->rel_arr, newrel->nspname, ! newrel->relname, CLUSTER_OLD); map_rel(oldrel, newrel, old_db, new_db, old_pgdata, new_pgdata, maps + num_maps); --- 63,70 ---- if (strcmp(newrel->nspname, "pg_toast") == 0) continue; ! oldrel = relarr_lookup_rel(&old_cluster, &old_db->rel_arr, ! newrel->nspname, newrel->relname); map_rel(oldrel, newrel, old_db, new_db, old_pgdata, new_pgdata, maps + num_maps); *************** gen_db_file_maps(DbInfo *old_db, DbInfo *** 91,100 **** newrel->reloid); /* look them up in their respective arrays */ ! old_toast = relarr_lookup_reloid(&old_db->rel_arr, ! oldrel->toastrelid, CLUSTER_OLD); ! new_toast = relarr_lookup_rel(&new_db->rel_arr, ! "pg_toast", new_name, CLUSTER_NEW); /* finally create a mapping for them */ map_rel(old_toast, new_toast, old_db, new_db, old_pgdata, new_pgdata, --- 88,97 ---- newrel->reloid); /* look them up in their respective arrays */ ! old_toast = relarr_lookup_reloid(&old_cluster, &old_db->rel_arr, ! oldrel->toastrelid); ! new_toast = relarr_lookup_rel(&new_cluster, &new_db->rel_arr, ! "pg_toast", new_name); /* finally create a mapping for them */ map_rel(old_toast, new_toast, old_db, new_db, old_pgdata, new_pgdata, *************** gen_db_file_maps(DbInfo *old_db, DbInfo *** 118,127 **** /* look them up in their respective arrays */ /* we lose our cache location here */ ! old_toast = relarr_lookup_rel(&old_db->rel_arr, ! "pg_toast", old_name, CLUSTER_OLD); ! new_toast = relarr_lookup_rel(&new_db->rel_arr, ! "pg_toast", new_name, CLUSTER_NEW); /* finally create a mapping for them */ map_rel(old_toast, new_toast, old_db, new_db, old_pgdata, --- 115,124 ---- /* look them up in their respective arrays */ /* we lose our cache location here */ ! old_toast = relarr_lookup_rel(&old_cluster, &old_db->rel_arr, ! "pg_toast", old_name); ! new_toast = relarr_lookup_rel(&new_cluster, &new_db->rel_arr, ! "pg_toast", new_name); /* finally create a mapping for them */ map_rel(old_toast, new_toast, old_db, new_db, old_pgdata, *************** print_maps(FileNameMap *maps, int n, con *** 214,226 **** /* * get_db_infos() * ! * Scans pg_database system catalog and returns (in dbinfs_arr) all user * databases. */ static void ! get_db_infos(DbInfoArr *dbinfs_arr, Cluster whichCluster) { ! PGconn *conn = connectToServer("template1", whichCluster); PGresult *res; int ntups; int tupnum; --- 211,223 ---- /* * get_db_infos() * ! * Scans pg_database system catalog and populates all user * databases. */ static void ! get_db_infos(ClusterInfo *cluster) { ! PGconn *conn = connectToServer(cluster, "template1"); PGresult *res; int ntups; int tupnum; *************** get_db_infos(DbInfoArr *dbinfs_arr, Clus *** 256,263 **** PQfinish(conn); ! dbinfs_arr->dbs = dbinfos; ! dbinfs_arr->ndbs = ntups; } --- 253,260 ---- PQfinish(conn); ! cluster->dbarr.dbs = dbinfos; ! cluster->dbarr.ndbs = ntups; } *************** get_db_infos(DbInfoArr *dbinfs_arr, Clus *** 268,285 **** * on the given "port". Assumes that server is already running. */ void ! get_db_and_rel_infos(DbInfoArr *db_arr, Cluster whichCluster) { int dbnum; ! get_db_infos(db_arr, whichCluster); ! for (dbnum = 0; dbnum < db_arr->ndbs; dbnum++) ! get_rel_infos(&db_arr->dbs[dbnum], ! &db_arr->dbs[dbnum].rel_arr, whichCluster); if (log_opts.debug) ! dbarr_print(db_arr, whichCluster); } --- 265,282 ---- * on the given "port". Assumes that server is already running. */ void ! get_db_and_rel_infos(ClusterInfo *cluster) { int dbnum; ! get_db_infos(cluster); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) ! get_rel_infos(cluster, &cluster->dbarr.dbs[dbnum], ! &cluster->dbarr.dbs[dbnum].rel_arr); if (log_opts.debug) ! dbarr_print(cluster); } *************** get_db_and_rel_infos(DbInfoArr *db_arr, *** 293,301 **** * FirstNormalObjectId belongs to the user */ static void ! get_rel_infos(const DbInfo *dbinfo, RelInfoArr *relarr, Cluster whichCluster) { ! PGconn *conn = connectToServer(dbinfo->db_name, whichCluster); PGresult *res; RelInfo *relinfos; int ntups; --- 290,298 ---- * FirstNormalObjectId belongs to the user */ static void ! get_rel_infos(ClusterInfo *cluster, const DbInfo *dbinfo, RelInfoArr *relarr) { ! PGconn *conn = connectToServer(cluster, dbinfo->db_name); PGresult *res; RelInfo *relinfos; int ntups; *************** dbarr_lookup_db(DbInfoArr *db_arr, const *** 417,424 **** * RelInfo structure. */ static RelInfo * ! relarr_lookup_rel(RelInfoArr *rel_arr, const char *nspname, ! const char *relname, Cluster whichCluster) { int relnum; --- 414,421 ---- * RelInfo structure. */ static RelInfo * ! relarr_lookup_rel(ClusterInfo *cluster, RelInfoArr *rel_arr, ! const char *nspname, const char *relname) { int relnum; *************** relarr_lookup_rel(RelInfoArr *rel_arr, c *** 441,447 **** } } pg_log(PG_FATAL, "Could not find %s.%s in %s cluster\n", ! nspname, relname, CLUSTER_NAME(whichCluster)); return NULL; } --- 438,444 ---- } } pg_log(PG_FATAL, "Could not find %s.%s in %s cluster\n", ! nspname, relname, CLUSTER_NAME(cluster)); return NULL; } *************** relarr_lookup_rel(RelInfoArr *rel_arr, c *** 454,461 **** * found. */ static RelInfo * ! relarr_lookup_reloid(RelInfoArr *rel_arr, Oid oid, ! Cluster whichCluster) { int relnum; --- 451,457 ---- * found. */ static RelInfo * ! relarr_lookup_reloid(ClusterInfo *cluster, RelInfoArr *rel_arr, Oid oid) { int relnum; *************** relarr_lookup_reloid(RelInfoArr *rel_arr *** 465,471 **** return &rel_arr->rels[relnum]; } pg_log(PG_FATAL, "Could not find %d in %s cluster\n", ! oid, CLUSTER_NAME(whichCluster)); return NULL; } --- 461,467 ---- return &rel_arr->rels[relnum]; } pg_log(PG_FATAL, "Could not find %d in %s cluster\n", ! oid, CLUSTER_NAME(cluster)); return NULL; } *************** dbarr_free(DbInfoArr *db_arr) *** 491,506 **** static void ! dbarr_print(DbInfoArr *arr, Cluster whichCluster) { int dbnum; ! pg_log(PG_DEBUG, "%s databases\n", CLUSTER_NAME(whichCluster)); ! for (dbnum = 0; dbnum < arr->ndbs; dbnum++) { ! pg_log(PG_DEBUG, "Database: %s\n", arr->dbs[dbnum].db_name); ! relarr_print(&arr->dbs[dbnum].rel_arr); pg_log(PG_DEBUG, "\n\n"); } } --- 487,502 ---- static void ! dbarr_print(ClusterInfo *cluster) { int dbnum; ! pg_log(PG_DEBUG, "%s databases\n", CLUSTER_NAME(cluster)); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { ! pg_log(PG_DEBUG, "Database: %s\n", cluster->dbarr.dbs[dbnum].db_name); ! relarr_print(&cluster->dbarr.dbs[dbnum].rel_arr); pg_log(PG_DEBUG, "\n\n"); } } diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c index bfd2def..d2ca08b 100644 *** /tmp/6Uc1Td_pg_upgrade.c Wed Jan 5 09:04:03 2011 --- /tmp/e9RP2d_pg_upgrade.c Wed Jan 5 09:04:03 2011 *************** static void set_frozenxids(void); *** 22,29 **** static void setup(char *argv0, bool live_check); static void cleanup(void); ! ClusterInfo old_cluster, ! new_cluster; OSInfo os_info; int --- 22,28 ---- static void setup(char *argv0, bool live_check); static void cleanup(void); ! ClusterInfo old_cluster, new_cluster; OSInfo os_info; int *************** main(int argc, char **argv) *** 46,52 **** /* -- NEW -- */ ! start_postmaster(CLUSTER_NEW, false); check_new_cluster(); report_clusters_compatible(); --- 45,51 ---- /* -- NEW -- */ ! start_postmaster(&new_cluster, false); check_new_cluster(); report_clusters_compatible(); *************** prepare_new_cluster(void) *** 178,184 **** new_cluster.bindir, new_cluster.port, os_info.user, log_opts.filename); check_ok(); ! get_pg_database_relfilenode(CLUSTER_NEW); } --- 177,183 ---- new_cluster.bindir, new_cluster.port, os_info.user, log_opts.filename); check_ok(); ! get_pg_database_relfilenode(&new_cluster); } *************** static void *** 186,192 **** prepare_new_databases(void) { /* -- NEW -- */ ! start_postmaster(CLUSTER_NEW, false); /* * We set autovacuum_freeze_max_age to its maximum value so autovacuum --- 185,191 ---- prepare_new_databases(void) { /* -- NEW -- */ ! start_postmaster(&new_cluster, false); /* * We set autovacuum_freeze_max_age to its maximum value so autovacuum *************** prepare_new_databases(void) *** 210,216 **** GLOBALS_DUMP_FILE, log_opts.filename); check_ok(); ! get_db_and_rel_infos(&new_cluster.dbarr, CLUSTER_NEW); stop_postmaster(false, false); } --- 209,215 ---- GLOBALS_DUMP_FILE, log_opts.filename); check_ok(); ! get_db_and_rel_infos(&new_cluster); stop_postmaster(false, false); } *************** static void *** 220,226 **** create_new_objects(void) { /* -- NEW -- */ ! start_postmaster(CLUSTER_NEW, false); install_support_functions(); --- 219,225 ---- create_new_objects(void) { /* -- NEW -- */ ! start_postmaster(&new_cluster, false); install_support_functions(); *************** create_new_objects(void) *** 235,241 **** /* regenerate now that we have db schemas */ dbarr_free(&new_cluster.dbarr); ! get_db_and_rel_infos(&new_cluster.dbarr, CLUSTER_NEW); uninstall_support_functions(); --- 234,240 ---- /* regenerate now that we have db schemas */ dbarr_free(&new_cluster.dbarr); ! get_db_and_rel_infos(&new_cluster); uninstall_support_functions(); *************** set_frozenxids(void) *** 309,315 **** prep_status("Setting frozenxid counters in new cluster"); ! conn_template1 = connectToServer("template1", CLUSTER_NEW); /* set pg_database.datfrozenxid */ PQclear(executeQueryOrDie(conn_template1, --- 308,314 ---- prep_status("Setting frozenxid counters in new cluster"); ! conn_template1 = connectToServer(&new_cluster, "template1"); /* set pg_database.datfrozenxid */ PQclear(executeQueryOrDie(conn_template1, *************** set_frozenxids(void) *** 344,350 **** "SET datallowconn = true " "WHERE datname = '%s'", datname)); ! conn = connectToServer(datname, CLUSTER_NEW); /* set pg_class.relfrozenxid */ PQclear(executeQueryOrDie(conn, --- 343,349 ---- "SET datallowconn = true " "WHERE datname = '%s'", datname)); ! conn = connectToServer(&new_cluster, datname); /* set pg_class.relfrozenxid */ PQclear(executeQueryOrDie(conn, diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h index c53f935..b6ce965 100644 *** /tmp/oOiOpd_pg_upgrade.h Wed Jan 5 09:04:03 2011 --- /tmp/cMi7nb_pg_upgrade.h Wed Jan 5 09:04:03 2011 *************** *** 52,60 **** #define EXE_EXT ".exe" #endif ! #define CLUSTER_NAME(cluster) ((cluster) == CLUSTER_OLD ? "old" : "new") ! #define ACTIVE_CLUSTER(cluster) (((cluster) == CLUSTER_OLD) ? \ ! &old_cluster : &new_cluster) #define atooid(x) ((Oid) strtoul((x), NULL, 10)) --- 52,59 ---- #define EXE_EXT ".exe" #endif ! #define CLUSTER_NAME(cluster) ((cluster) == &old_cluster ? "old" : \ ! (cluster) == &new_cluster ? "new" : "none") #define atooid(x) ((Oid) strtoul((x), NULL, 10)) *************** typedef enum *** 163,177 **** PG_DEBUG } 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; --- 162,167 ---- *************** typedef struct *** 234,240 **** char **libraries; /* loadable libraries */ int num_libraries; pgpid_t postmasterPID; /* PID of currently running postmaster */ ! Cluster running_cluster; } OSInfo; --- 224,230 ---- char **libraries; /* loadable libraries */ int num_libraries; pgpid_t postmasterPID; /* PID of currently running postmaster */ ! ClusterInfo *running_cluster; } OSInfo; *************** typedef struct *** 243,250 **** */ extern LogOpts log_opts; extern UserOpts user_opts; ! extern ClusterInfo old_cluster, ! new_cluster; extern OSInfo os_info; extern char scandir_file_pattern[]; --- 233,239 ---- */ extern LogOpts log_opts; extern UserOpts user_opts; ! extern ClusterInfo old_cluster, new_cluster; extern OSInfo os_info; extern char scandir_file_pattern[]; *************** void check_loadable_libraries(void); *** 339,346 **** FileNameMap *gen_db_file_maps(DbInfo *old_db, DbInfo *new_db, int *nmaps, const char *old_pgdata, const char *new_pgdata); ! void get_db_and_rel_infos(DbInfoArr *db_arr, ! Cluster whichCluster); DbInfo *dbarr_lookup_db(DbInfoArr *db_arr, const char *db_name); void dbarr_free(DbInfoArr *db_arr); void print_maps(FileNameMap *maps, int n, --- 328,334 ---- FileNameMap *gen_db_file_maps(DbInfo *old_db, DbInfo *new_db, int *nmaps, const char *old_pgdata, const char *new_pgdata); ! void get_db_and_rel_infos(ClusterInfo *cluster); DbInfo *dbarr_lookup_db(DbInfoArr *db_arr, const char *db_name); void dbarr_free(DbInfoArr *db_arr); void print_maps(FileNameMap *maps, int n, *************** void parseCommandLine(int argc, char *a *** 352,358 **** /* relfilenode.c */ ! void get_pg_database_relfilenode(Cluster whichCluster); const char *transfer_all_new_dbs(DbInfoArr *olddb_arr, DbInfoArr *newdb_arr, char *old_pgdata, char *new_pgdata); --- 340,346 ---- /* relfilenode.c */ ! void get_pg_database_relfilenode(ClusterInfo *cluster); const char *transfer_all_new_dbs(DbInfoArr *olddb_arr, DbInfoArr *newdb_arr, char *old_pgdata, char *new_pgdata); *************** void init_tablespaces(void); *** 364,377 **** /* server.c */ ! PGconn *connectToServer(const char *db_name, ! Cluster whichCluster); ! PGresult *executeQueryOrDie(PGconn *conn, ! const char *fmt,...); ! void start_postmaster(Cluster whichCluster, bool quiet); void stop_postmaster(bool fast, bool quiet); ! uint32 get_major_server_version(char **verstr, Cluster whichCluster); void check_for_libpq_envvars(void); --- 352,363 ---- /* server.c */ ! PGconn *connectToServer(ClusterInfo *cluster, const char *db_name); ! PGresult *executeQueryOrDie(PGconn *conn, const char *fmt,...); ! void start_postmaster(ClusterInfo *cluster, bool quiet); void stop_postmaster(bool fast, bool quiet); ! uint32 get_major_server_version(ClusterInfo *cluster, char **verstr); void check_for_libpq_envvars(void); *************** unsigned int str2uint(const char *str); *** 394,410 **** /* version.c */ ! void new_9_0_populate_pg_largeobject_metadata( ! bool check_mode, Cluster whichCluster); /* version_old_8_3.c */ ! void old_8_3_check_for_name_data_type_usage(Cluster whichCluster); ! void old_8_3_check_for_tsquery_usage(Cluster whichCluster); ! void old_8_3_rebuild_tsvector_tables(bool check_mode, ! Cluster whichCluster); ! void old_8_3_invalidate_hash_gin_indexes(bool check_mode, ! Cluster whichCluster); ! void old_8_3_invalidate_bpchar_pattern_ops_indexes(bool check_mode, ! Cluster whichCluster); ! char *old_8_3_create_sequence_script(Cluster whichCluster); --- 380,394 ---- /* version.c */ ! void new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster, ! bool check_mode); /* version_old_8_3.c */ ! void old_8_3_check_for_name_data_type_usage(ClusterInfo *cluster); ! void old_8_3_check_for_tsquery_usage(ClusterInfo *cluster); ! void old_8_3_rebuild_tsvector_tables(ClusterInfo *cluster, bool check_mode); ! void old_8_3_invalidate_hash_gin_indexes(ClusterInfo *cluster, bool check_mode); ! void old_8_3_invalidate_bpchar_pattern_ops_indexes(ClusterInfo *cluster, ! bool check_mode); ! char *old_8_3_create_sequence_script(ClusterInfo *cluster); diff --git a/contrib/pg_upgrade/relfilenode.c b/contrib/pg_upgrade/relfilenode.c index da7531e..b23ce2f 100644 *** /tmp/ODaojb_relfilenode.c Wed Jan 5 09:04:03 2011 --- /tmp/iRj1Qd_relfilenode.c Wed Jan 5 09:04:03 2011 *************** transfer_all_new_dbs(DbInfoArr *olddb_ar *** 77,86 **** * relfilenodes later in the upgrade process. */ void ! get_pg_database_relfilenode(Cluster whichCluster) { ! PGconn *conn = connectToServer("template1", whichCluster); ! ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); PGresult *res; int i_relfile; --- 77,85 ---- * relfilenodes later in the upgrade process. */ void ! get_pg_database_relfilenode(ClusterInfo *cluster) { ! PGconn *conn = connectToServer(cluster, "template1"); PGresult *res; int i_relfile; *************** get_pg_database_relfilenode(Cluster whic *** 94,100 **** "ORDER BY c.relname"); i_relfile = PQfnumber(res, "relfilenode"); ! active_cluster->pg_database_oid = atooid(PQgetvalue(res, 0, i_relfile)); PQclear(res); PQfinish(conn); --- 93,99 ---- "ORDER BY c.relname"); i_relfile = PQfnumber(res, "relfilenode"); ! cluster->pg_database_oid = atooid(PQgetvalue(res, 0, i_relfile)); PQclear(res); PQfinish(conn); diff --git a/contrib/pg_upgrade/server.c b/contrib/pg_upgrade/server.c index 127f9c4..56dcb10 100644 *** /tmp/WhnLOc_server.c Wed Jan 5 09:04:03 2011 --- /tmp/AAEUcd_server.c Wed Jan 5 09:04:03 2011 *************** *** 15,22 **** static pgpid_t get_postmaster_pid(const char *datadir); ! static bool test_server_conn(int timeout, ! Cluster whichCluster); /* --- 15,21 ---- static pgpid_t get_postmaster_pid(const char *datadir); ! static bool test_server_conn(ClusterInfo *cluster, int timeout); /* *************** static bool test_server_conn(int timeout *** 27,37 **** * message and calls exit_nicely() to kill the program. */ PGconn * ! connectToServer(const char *db_name, ! Cluster whichCluster) { ! ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); ! unsigned short port = active_cluster->port; char connectString[MAXPGPATH]; PGconn *conn; --- 26,34 ---- * message and calls exit_nicely() to kill the program. */ PGconn * ! connectToServer(ClusterInfo *cluster, const char *db_name) { ! unsigned short port = cluster->port; char connectString[MAXPGPATH]; PGconn *conn; *************** get_postmaster_pid(const char *datadir) *** 132,141 **** * is retrieved by reading the PG_VERSION file. */ uint32 ! get_major_server_version(char **verstr, Cluster whichCluster) { ! ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); ! const char *datadir = active_cluster->pgdata; FILE *version_fd; char ver_file[MAXPGPATH]; int integer_version = 0; --- 129,137 ---- * is retrieved by reading the PG_VERSION file. */ uint32 ! get_major_server_version(ClusterInfo *cluster, char **verstr) { ! const char *datadir = cluster->pgdata; FILE *version_fd; char ver_file[MAXPGPATH]; int integer_version = 0; *************** get_major_server_version(char **verstr, *** 160,176 **** void ! start_postmaster(Cluster whichCluster, bool quiet) { - ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); char cmd[MAXPGPATH]; const char *bindir; const char *datadir; unsigned short port; ! bindir = active_cluster->bindir; ! datadir = active_cluster->pgdata; ! port = active_cluster->port; /* * On Win32, we can't send both pg_upgrade output and pg_ctl output to the --- 156,171 ---- void ! start_postmaster(ClusterInfo *cluster, bool quiet) { char cmd[MAXPGPATH]; const char *bindir; const char *datadir; unsigned short port; ! bindir = cluster->bindir; ! datadir = cluster->pgdata; ! port = cluster->port; /* * On Win32, we can't send both pg_upgrade output and pg_ctl output to the *************** start_postmaster(Cluster whichCluster, b *** 193,205 **** /* wait for the server to start properly */ ! if (test_server_conn(POSTMASTER_UPTIME, whichCluster) == false) 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); if ((os_info.postmasterPID = get_postmaster_pid(datadir)) == 0) pg_log(PG_FATAL, " Unable to get postmaster pid\n"); ! os_info.running_cluster = whichCluster; } --- 188,200 ---- /* wait for the server to start properly */ ! 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\".", ! CLUSTER_NAME(cluster), cmd); if ((os_info.postmasterPID = get_postmaster_pid(datadir)) == 0) pg_log(PG_FATAL, " Unable to get postmaster pid\n"); ! os_info.running_cluster = cluster; } *************** stop_postmaster(bool fast, bool quiet) *** 210,221 **** const char *bindir; const char *datadir; ! if (os_info.running_cluster == CLUSTER_OLD) { bindir = old_cluster.bindir; datadir = old_cluster.pgdata; } ! else if (os_info.running_cluster == CLUSTER_NEW) { bindir = new_cluster.bindir; datadir = new_cluster.pgdata; --- 205,216 ---- const char *bindir; const char *datadir; ! if (os_info.running_cluster == &old_cluster) { bindir = old_cluster.bindir; datadir = old_cluster.pgdata; } ! else if (os_info.running_cluster == &new_cluster) { bindir = new_cluster.bindir; datadir = new_cluster.pgdata; *************** stop_postmaster(bool fast, bool quiet) *** 236,242 **** exec_prog(fast ? false : true, "%s", cmd); os_info.postmasterPID = 0; ! os_info.running_cluster = NONE; } --- 231,237 ---- exec_prog(fast ? false : true, "%s", cmd); os_info.postmasterPID = 0; ! os_info.running_cluster = NULL; } *************** stop_postmaster(bool fast, bool quiet) *** 250,259 **** * Returns true if the connection attempt was successfull, false otherwise. */ static bool ! test_server_conn(int timeout, Cluster whichCluster) { ! ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); ! unsigned short port = active_cluster->port; PGconn *conn = NULL; char con_opts[MAX_STRING]; int tries; --- 245,253 ---- * Returns true if the connection attempt was successfull, false otherwise. */ static bool ! test_server_conn(ClusterInfo *cluster, int timeout) { ! unsigned short port = cluster->port; PGconn *conn = NULL; char con_opts[MAX_STRING]; int tries; *************** test_server_conn(int timeout, Cluster wh *** 275,281 **** if (tries == STARTUP_WARNING_TRIES) prep_status("Trying to start %s server ", ! CLUSTER_NAME(whichCluster)); else if (tries > STARTUP_WARNING_TRIES) pg_log(PG_REPORT, "."); } --- 269,275 ---- if (tries == STARTUP_WARNING_TRIES) prep_status("Trying to start %s server ", ! CLUSTER_NAME(cluster)); else if (tries > STARTUP_WARNING_TRIES) pg_log(PG_REPORT, "."); } diff --git a/contrib/pg_upgrade/tablespace.c b/contrib/pg_upgrade/tablespace.c index 4930d5d..70fe057 100644 *** /tmp/u5hK1a_tablespace.c Wed Jan 5 09:04:03 2011 --- /tmp/Qgyybb_tablespace.c Wed Jan 5 09:04:03 2011 *************** *** 10,17 **** #include "pg_upgrade.h" static void get_tablespace_paths(void); ! static void set_tablespace_directory_suffix( ! Cluster whichCluster); void --- 10,16 ---- #include "pg_upgrade.h" static void get_tablespace_paths(void); ! static void set_tablespace_directory_suffix(ClusterInfo *cluster); void *************** init_tablespaces(void) *** 19,26 **** { get_tablespace_paths(); ! set_tablespace_directory_suffix(CLUSTER_OLD); ! set_tablespace_directory_suffix(CLUSTER_NEW); if (os_info.num_tablespaces > 0 && strcmp(old_cluster.tablespace_suffix, new_cluster.tablespace_suffix) == 0) --- 18,25 ---- { get_tablespace_paths(); ! set_tablespace_directory_suffix(&old_cluster); ! set_tablespace_directory_suffix(&new_cluster); if (os_info.num_tablespaces > 0 && strcmp(old_cluster.tablespace_suffix, new_cluster.tablespace_suffix) == 0) *************** init_tablespaces(void) *** 39,45 **** static void get_tablespace_paths(void) { ! PGconn *conn = connectToServer("template1", CLUSTER_OLD); PGresult *res; int tblnum; int i_spclocation; --- 38,44 ---- static void get_tablespace_paths(void) { ! PGconn *conn = connectToServer(&old_cluster, "template1"); PGresult *res; int tblnum; int i_spclocation; *************** get_tablespace_paths(void) *** 71,91 **** static void ! set_tablespace_directory_suffix(Cluster whichCluster) { ! ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); ! ! if (GET_MAJOR_VERSION(active_cluster->major_version) <= 804) ! active_cluster->tablespace_suffix = pg_strdup(""); else { /* This cluster has a version-specific subdirectory */ ! active_cluster->tablespace_suffix = pg_malloc(4 + ! strlen(active_cluster->major_version_str) + 10 /* OIDCHARS */ + 1); /* The leading slash is needed to start a new directory. */ ! sprintf(active_cluster->tablespace_suffix, "/PG_%s_%d", active_cluster->major_version_str, ! active_cluster->controldata.cat_ver); } } --- 70,88 ---- static void ! set_tablespace_directory_suffix(ClusterInfo *cluster) { ! if (GET_MAJOR_VERSION(cluster->major_version) <= 804) ! cluster->tablespace_suffix = pg_strdup(""); else { /* This cluster has a version-specific subdirectory */ ! cluster->tablespace_suffix = pg_malloc(4 + ! strlen(cluster->major_version_str) + 10 /* OIDCHARS */ + 1); /* The leading slash is needed to start a new directory. */ ! sprintf(cluster->tablespace_suffix, "/PG_%s_%d", cluster->major_version_str, ! cluster->controldata.cat_ver); } } diff --git a/contrib/pg_upgrade/version.c b/contrib/pg_upgrade/version.c index b85b814..cdda741 100644 *** /tmp/kw6RCe_version.c Wed Jan 5 09:04:03 2011 --- /tmp/0Xvpyc_version.c Wed Jan 5 09:04:03 2011 *************** *** 18,27 **** * 9.0 has a new pg_largeobject permission table */ void ! new_9_0_populate_pg_largeobject_metadata(bool check_mode, ! Cluster whichCluster) { - ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); int dbnum; FILE *script = NULL; bool found = false; --- 18,25 ---- * 9.0 has a new pg_largeobject permission table */ void ! new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster, bool check_mode) { int dbnum; FILE *script = NULL; bool found = false; *************** new_9_0_populate_pg_largeobject_metadata *** 32,43 **** snprintf(output_path, sizeof(output_path), "%s/pg_largeobject.sql", os_info.cwd); ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { PGresult *res; int i_count; ! DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(active_db->db_name, whichCluster); /* find if there are any large objects */ res = executeQueryOrDie(conn, --- 30,41 ---- snprintf(output_path, sizeof(output_path), "%s/pg_largeobject.sql", os_info.cwd); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { PGresult *res; int i_count; ! DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(cluster, active_db->db_name); /* find if there are any large objects */ res = executeQueryOrDie(conn, diff --git a/contrib/pg_upgrade/version_old_8_3.c b/contrib/pg_upgrade/version_old_8_3.c index 5a396de..c342cd9 100644 *** /tmp/M08uca_version_old_8_3.c Wed Jan 5 09:04:03 2011 --- /tmp/68bpUa_version_old_8_3.c Wed Jan 5 09:04:03 2011 *************** *** 19,27 **** * checks tables and indexes. */ void ! old_8_3_check_for_name_data_type_usage(Cluster whichCluster) { - ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); int dbnum; FILE *script = NULL; bool found = false; --- 19,26 ---- * checks tables and indexes. */ void ! old_8_3_check_for_name_data_type_usage(ClusterInfo *cluster) { int dbnum; FILE *script = NULL; bool found = false; *************** old_8_3_check_for_name_data_type_usage(C *** 32,38 **** snprintf(output_path, sizeof(output_path), "%s/tables_using_name.txt", os_info.cwd); ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; --- 31,37 ---- snprintf(output_path, sizeof(output_path), "%s/tables_using_name.txt", os_info.cwd); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; *************** old_8_3_check_for_name_data_type_usage(C *** 41,48 **** int i_nspname, i_relname, i_attname; ! DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(active_db->db_name, whichCluster); /* * With a smaller alignment in 8.4, 'name' cannot be used in a --- 40,47 ---- int i_nspname, i_relname, i_attname; ! DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(cluster, active_db->db_name); /* * With a smaller alignment in 8.4, 'name' cannot be used in a *************** old_8_3_check_for_name_data_type_usage(C *** 113,121 **** * so upgrading of such fields is impossible. */ void ! old_8_3_check_for_tsquery_usage(Cluster whichCluster) { - ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); int dbnum; FILE *script = NULL; bool found = false; --- 112,119 ---- * so upgrading of such fields is impossible. */ void ! old_8_3_check_for_tsquery_usage(ClusterInfo *cluster) { int dbnum; FILE *script = NULL; bool found = false; *************** old_8_3_check_for_tsquery_usage(Cluster *** 126,132 **** snprintf(output_path, sizeof(output_path), "%s/tables_using_tsquery.txt", os_info.cwd); ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; --- 124,130 ---- snprintf(output_path, sizeof(output_path), "%s/tables_using_tsquery.txt", os_info.cwd); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; *************** old_8_3_check_for_tsquery_usage(Cluster *** 135,142 **** int i_nspname, i_relname, i_attname; ! DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(active_db->db_name, whichCluster); /* Find any user-defined tsquery columns */ res = executeQueryOrDie(conn, --- 133,140 ---- int i_nspname, i_relname, i_attname; ! DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(cluster, active_db->db_name); /* Find any user-defined tsquery columns */ res = executeQueryOrDie(conn, *************** old_8_3_check_for_tsquery_usage(Cluster *** 208,217 **** * 'c' 'bb' 'aaa' -- 8.3 */ void ! old_8_3_rebuild_tsvector_tables(bool check_mode, ! Cluster whichCluster) { - ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); int dbnum; FILE *script = NULL; bool found = false; --- 206,213 ---- * 'c' 'bb' 'aaa' -- 8.3 */ void ! old_8_3_rebuild_tsvector_tables(ClusterInfo *cluster, bool check_mode) { int dbnum; FILE *script = NULL; bool found = false; *************** old_8_3_rebuild_tsvector_tables(bool che *** 222,228 **** snprintf(output_path, sizeof(output_path), "%s/rebuild_tsvector_tables.sql", os_info.cwd); ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; --- 218,224 ---- snprintf(output_path, sizeof(output_path), "%s/rebuild_tsvector_tables.sql", os_info.cwd); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; *************** old_8_3_rebuild_tsvector_tables(bool che *** 233,240 **** int i_nspname, i_relname, i_attname; ! DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(active_db->db_name, whichCluster); /* Find any user-defined tsvector columns */ res = executeQueryOrDie(conn, --- 229,236 ---- int i_nspname, i_relname, i_attname; ! DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(cluster, active_db->db_name); /* Find any user-defined tsvector columns */ res = executeQueryOrDie(conn, *************** old_8_3_rebuild_tsvector_tables(bool che *** 352,361 **** * Hash, Gin, and GiST index binary format has changes from 8.3->8.4 */ void ! old_8_3_invalidate_hash_gin_indexes(bool check_mode, ! Cluster whichCluster) { - ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); int dbnum; FILE *script = NULL; bool found = false; --- 348,355 ---- * Hash, Gin, and GiST index binary format has changes from 8.3->8.4 */ void ! old_8_3_invalidate_hash_gin_indexes(ClusterInfo *cluster, bool check_mode) { int dbnum; FILE *script = NULL; bool found = false; *************** old_8_3_invalidate_hash_gin_indexes(bool *** 366,372 **** snprintf(output_path, sizeof(output_path), "%s/reindex_hash_and_gin.sql", os_info.cwd); ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; --- 360,366 ---- snprintf(output_path, sizeof(output_path), "%s/reindex_hash_and_gin.sql", os_info.cwd); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; *************** old_8_3_invalidate_hash_gin_indexes(bool *** 374,381 **** int rowno; int i_nspname, i_relname; ! DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(active_db->db_name, whichCluster); /* find hash and gin indexes */ res = executeQueryOrDie(conn, --- 368,375 ---- int rowno; int i_nspname, i_relname; ! DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(cluster, active_db->db_name); /* find hash and gin indexes */ res = executeQueryOrDie(conn, *************** old_8_3_invalidate_hash_gin_indexes(bool *** 467,476 **** * 8.4 bpchar_pattern_ops no longer sorts based on trailing spaces */ void ! old_8_3_invalidate_bpchar_pattern_ops_indexes(bool check_mode, ! Cluster whichCluster) { - ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); int dbnum; FILE *script = NULL; bool found = false; --- 461,469 ---- * 8.4 bpchar_pattern_ops no longer sorts based on trailing spaces */ void ! old_8_3_invalidate_bpchar_pattern_ops_indexes(ClusterInfo *cluster, ! bool check_mode) { int dbnum; FILE *script = NULL; bool found = false; *************** old_8_3_invalidate_bpchar_pattern_ops_in *** 481,487 **** snprintf(output_path, sizeof(output_path), "%s/reindex_bpchar_ops.sql", os_info.cwd); ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; --- 474,480 ---- snprintf(output_path, sizeof(output_path), "%s/reindex_bpchar_ops.sql", os_info.cwd); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; *************** old_8_3_invalidate_bpchar_pattern_ops_in *** 489,496 **** int rowno; int i_nspname, i_relname; ! DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(active_db->db_name, whichCluster); /* find bpchar_pattern_ops indexes */ --- 482,489 ---- int rowno; int i_nspname, i_relname; ! DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(cluster, active_db->db_name); /* find bpchar_pattern_ops indexes */ *************** old_8_3_invalidate_bpchar_pattern_ops_in *** 602,610 **** * server, even in link mode. */ char * ! old_8_3_create_sequence_script(Cluster whichCluster) { - ClusterInfo *active_cluster = ACTIVE_CLUSTER(whichCluster); int dbnum; FILE *script = NULL; bool found = false; --- 595,602 ---- * server, even in link mode. */ char * ! old_8_3_create_sequence_script(ClusterInfo *cluster) { int dbnum; FILE *script = NULL; bool found = false; *************** old_8_3_create_sequence_script(Cluster w *** 614,620 **** prep_status("Creating script to adjust sequences"); ! for (dbnum = 0; dbnum < active_cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; --- 606,612 ---- prep_status("Creating script to adjust sequences"); ! for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++) { PGresult *res; bool db_used = false; *************** old_8_3_create_sequence_script(Cluster w *** 622,629 **** int rowno; int i_nspname, i_relname; ! DbInfo *active_db = &active_cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(active_db->db_name, whichCluster); /* Find any sequences */ res = executeQueryOrDie(conn, --- 614,621 ---- int rowno; int i_nspname, i_relname; ! DbInfo *active_db = &cluster->dbarr.dbs[dbnum]; ! PGconn *conn = connectToServer(cluster, active_db->db_name); /* Find any sequences */ res = executeQueryOrDie(conn,