In pg_upgrade, improve error reporting when the number of relation
authorBruce Momjian
Tue, 2 Oct 2012 15:53:45 +0000 (11:53 -0400)
committerBruce Momjian
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;
 }