From 8a7598091a29ac13736ef8b70986921746648582 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 2 Oct 2012 11:53:45 -0400 Subject: [PATCH] In pg_upgrade, improve error reporting when the number of relation objects does not match between the old and new clusters. Backpatch to 9.2. --- contrib/pg_upgrade/info.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/contrib/pg_upgrade/info.c b/contrib/pg_upgrade/info.c index 9d08f410c1..c406941c98 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; } -- 2.40.0