pg_upgrade map struct cleanup
От | Bruce Momjian |
---|---|
Тема | pg_upgrade map struct cleanup |
Дата | |
Msg-id | 201101080337.p083bVc29414@momjian.us обсуждение исходный текст |
Список | pgsql-hackers |
The attached, applied patch for pg_upgrade tracks only one copy of namespace/relname in FileNameMap because the old and new values are identical. -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + It's impossible for everything to be true. + diff --git a/contrib/pg_upgrade/info.c b/contrib/pg_upgrade/info.c index fb6ba75..301f6bb 100644 *** /tmp/pgdiff.28692/OjPD3a_info.c Fri Jan 7 22:36:02 2011 --- contrib/pg_upgrade/info.c Fri Jan 7 22:31:16 2011 *************** gen_db_file_maps(DbInfo *old_db, DbInfo *** 54,60 **** if (strcmp(old_rel->nspname, "pg_toast") == 0) continue; ! /* old/new non-toast relation names match */ new_rel = relarr_lookup_rel_name(&new_cluster, &new_db->rel_arr, old_rel->nspname, old_rel->relname); --- 54,60 ---- if (strcmp(old_rel->nspname, "pg_toast") == 0) continue; ! /* old/new relation names always match */ new_rel = relarr_lookup_rel_name(&new_cluster, &new_db->rel_arr, old_rel->nspname, old_rel->relname); *************** create_rel_filename_map(const char *old_ *** 135,145 **** map->old_relfilenode = old_rel->relfilenode; map->new_relfilenode = new_rel->relfilenode; ! /* used only for logging and error reporing */ ! snprintf(map->old_nspname, sizeof(map->old_nspname), "%s", old_rel->nspname); ! snprintf(map->new_nspname, sizeof(map->new_nspname), "%s", new_rel->nspname); ! snprintf(map->old_relname, sizeof(map->old_relname), "%s", old_rel->relname); ! snprintf(map->new_relname, sizeof(map->new_relname), "%s", new_rel->relname); } --- 135,143 ---- map->old_relfilenode = old_rel->relfilenode; map->new_relfilenode = new_rel->relfilenode; ! /* used only for logging and error reporing, old/new are identical */ ! snprintf(map->nspname, sizeof(map->nspname), "%s", old_rel->nspname); ! snprintf(map->relname, sizeof(map->relname), "%s", old_rel->relname); } *************** print_maps(FileNameMap *maps, int n, con *** 153,162 **** pg_log(PG_DEBUG, "mappings for db %s:\n", dbName); for (mapnum = 0; mapnum < n; mapnum++) ! pg_log(PG_DEBUG, "%s.%s:%u ==> %s.%s:%u\n", ! maps[mapnum].old_nspname, maps[mapnum].old_relname, maps[mapnum].old_relfilenode, - maps[mapnum].new_nspname, maps[mapnum].new_relname, maps[mapnum].new_relfilenode); pg_log(PG_DEBUG, "\n\n"); --- 151,159 ---- pg_log(PG_DEBUG, "mappings for db %s:\n", dbName); for (mapnum = 0; mapnum < n; mapnum++) ! pg_log(PG_DEBUG, "%s.%s: %u to %u\n", ! maps[mapnum].nspname, maps[mapnum].relname, maps[mapnum].old_relfilenode, maps[mapnum].new_relfilenode); pg_log(PG_DEBUG, "\n\n"); *************** get_rel_infos(ClusterInfo *cluster, DbIn *** 265,271 **** char query[QUERY_ALLOC]; /* ! * pg_largeobject contains user data that does not appear the pg_dumpall * --schema-only output, so we have to copy that system table heap and * index. Ideally we could just get the relfilenode from template1 but * pg_largeobject_loid_pn_index's relfilenode can change if the table was --- 262,268 ---- char query[QUERY_ALLOC]; /* ! * pg_largeobject contains user data that does not appear in pg_dumpall * --schema-only output, so we have to copy that system table heap and * index. Ideally we could just get the relfilenode from template1 but * pg_largeobject_loid_pn_index's relfilenode can change if the table was diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h index 01eddfb..95db4dd 100644 *** /tmp/pgdiff.28692/cozDUc_pg_upgrade.h Fri Jan 7 22:36:02 2011 --- contrib/pg_upgrade/pg_upgrade.h Fri Jan 7 22:27:21 2011 *************** typedef struct *** 94,104 **** Oid old_relfilenode; Oid new_relfilenode; /* the rest are used only for logging and error reporting */ ! char old_nspname[NAMEDATALEN]; /* namespaces */ ! char new_nspname[NAMEDATALEN]; ! /* old/new relnames differ for toast tables and toast indexes */ ! char old_relname[NAMEDATALEN]; ! char new_relname[NAMEDATALEN]; } FileNameMap; /* --- 94,101 ---- Oid old_relfilenode; Oid new_relfilenode; /* the rest are used only for logging and error reporting */ ! char nspname[NAMEDATALEN]; /* namespaces */ ! char relname[NAMEDATALEN]; } FileNameMap; /* diff --git a/contrib/pg_upgrade/relfilenode.c b/contrib/pg_upgrade/relfilenode.c index 33c2c3e..b30f5e0 100644 *** /tmp/pgdiff.28692/yrt6Fb_relfilenode.c Fri Jan 7 22:36:02 2011 --- contrib/pg_upgrade/relfilenode.c Fri Jan 7 22:30:53 2011 *************** static void transfer_single_new_db(pageC *** 17,24 **** FileNameMap *maps, int size); static void transfer_relfile(pageCnvCtx *pageConverter, const char *fromfile, const char *tofile, ! const char *old_nspname, const char *new_nspname, ! const char *old_relname, const char *new_relname); /* used by scandir(), must be global */ char scandir_file_pattern[MAXPGPATH]; --- 17,23 ---- FileNameMap *maps, int size); static void transfer_relfile(pageCnvCtx *pageConverter, const char *fromfile, const char *tofile, ! const char *nspname, const char *relname); /* used by scandir(), must be global */ char scandir_file_pattern[MAXPGPATH]; *************** transfer_single_new_db(pageCnvCtx *pageC *** 149,156 **** */ unlink(new_file); transfer_relfile(pageConverter, old_file, new_file, ! maps[mapnum].old_nspname, maps[mapnum].new_nspname, ! maps[mapnum].old_relname, maps[mapnum].new_relname); /* fsm/vm files added in PG 8.4 */ if (GET_MAJOR_VERSION(old_cluster.major_version) >= 804) --- 148,154 ---- */ unlink(new_file); transfer_relfile(pageConverter, old_file, new_file, ! maps[mapnum].nspname, maps[mapnum].relname); /* fsm/vm files added in PG 8.4 */ if (GET_MAJOR_VERSION(old_cluster.major_version) >= 804) *************** transfer_single_new_db(pageCnvCtx *pageC *** 173,180 **** unlink(new_file); transfer_relfile(pageConverter, old_file, new_file, ! maps[mapnum].old_nspname, maps[mapnum].new_nspname, ! maps[mapnum].old_relname, maps[mapnum].new_relname); } } } --- 171,177 ---- unlink(new_file); transfer_relfile(pageConverter, old_file, new_file, ! maps[mapnum].nspname, maps[mapnum].relname); } } } *************** transfer_single_new_db(pageCnvCtx *pageC *** 201,208 **** unlink(new_file); transfer_relfile(pageConverter, old_file, new_file, ! maps[mapnum].old_nspname, maps[mapnum].new_nspname, ! maps[mapnum].old_relname, maps[mapnum].new_relname); } } } --- 198,204 ---- unlink(new_file); transfer_relfile(pageConverter, old_file, new_file, ! maps[mapnum].nspname, maps[mapnum].relname); } } } *************** transfer_single_new_db(pageCnvCtx *pageC *** 224,231 **** */ static void transfer_relfile(pageCnvCtx *pageConverter, const char *old_file, ! const char *new_file, const char *old_nspname, const char *new_nspname, ! const char *old_relname, const char *new_relname) { const char *msg; --- 220,226 ---- */ static void transfer_relfile(pageCnvCtx *pageConverter, const char *old_file, ! const char *new_file, const char *nspname, const char *relname) { const char *msg; *************** transfer_relfile(pageCnvCtx *pageConvert *** 238,245 **** pg_log(PG_INFO, "copying %s to %s\n", old_file, new_file); if ((msg = copyAndUpdateFile(pageConverter, old_file, new_file, true)) != NULL) ! pg_log(PG_FATAL, "error while copying %s.%s(%s) to %s.%s(%s): %s\n", ! old_nspname, old_relname, old_file, new_nspname, new_relname, new_file, msg); } else { --- 233,240 ---- pg_log(PG_INFO, "copying %s to %s\n", old_file, new_file); if ((msg = copyAndUpdateFile(pageConverter, old_file, new_file, true)) != NULL) ! pg_log(PG_FATAL, "error while copying %s.%s (%s to %s): %s\n", ! nspname, relname, old_file, new_file, msg); } else { *************** transfer_relfile(pageCnvCtx *pageConvert *** 247,255 **** if ((msg = linkAndUpdateFile(pageConverter, old_file, new_file)) != NULL) pg_log(PG_FATAL, ! "error while creating link from %s.%s(%s) to %s.%s(%s): %s\n", ! old_nspname, old_relname, old_file, new_nspname, new_relname, ! new_file, msg); } return; } --- 242,249 ---- if ((msg = linkAndUpdateFile(pageConverter, old_file, new_file)) != NULL) pg_log(PG_FATAL, ! "error while creating link from %s.%s (%s to %s): %s\n", ! nspname, relname, old_file, new_file, msg); } return; }
В списке pgsql-hackers по дате отправления: