diff --git a/contrib/pg_upgrade/info.c b/contrib/pg_upgrade/info.c index 9d08f410c1043408653662a74cbcf4641ab07212..c406941c9810a393ddaadb9b4b990e42694d1ca3 100644 --- a/contrib/pg_upgrade/info.c +++ b/contrib/pg_upgrade/info.c @@ -40,14 +40,11 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db, int relnum; int num_maps = 0; - if (old_db->rel_arr.nrels != new_db->rel_arr.nrels) - pg_log(PG_FATAL, "old and new databases \"%s\" have a different number of relations\n", - old_db->db_name); - maps = (FileNameMap *) pg_malloc(sizeof(FileNameMap) * old_db->rel_arr.nrels); - for (relnum = 0; relnum < old_db->rel_arr.nrels; relnum++) + for (relnum = 0; relnum < Min(old_db->rel_arr.nrels, new_db->rel_arr.nrels); + relnum++) { RelInfo *old_rel = &old_db->rel_arr.rels[relnum]; RelInfo *new_rel = &new_db->rel_arr.rels[relnum]; @@ -78,6 +75,11 @@ gen_db_file_maps(DbInfo *old_db, DbInfo *new_db, num_maps++; } + /* Do this check after the loop so hopefully we will produce a clearer error above */ + if (old_db->rel_arr.nrels != new_db->rel_arr.nrels) + pg_log(PG_FATAL, "old and new databases \"%s\" have a different number of relations\n", + old_db->db_name); + *nmaps = num_maps; return maps; }