]> granicus.if.org Git - postgresql/commitdiff
In pg_upgrade, improve error reporting when the number of relation
authorBruce Momjian <bruce@momjian.us>
Tue, 2 Oct 2012 15:53:45 +0000 (11:53 -0400)
committerBruce Momjian <bruce@momjian.us>
Tue, 2 Oct 2012 15:53:45 +0000 (11:53 -0400)
objects does not match between the old and new clusters.

Backpatch to 9.2.

contrib/pg_upgrade/info.c

index 9d08f410c1043408653662a74cbcf4641ab07212..c406941c9810a393ddaadb9b4b990e42694d1ca3 100644 (file)
@@ -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;
 }