Commits

Anonymous committed 8a75980

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.

Comments (0)

Files changed (1)

contrib/pg_upgrade/info.c

 	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];
 		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;
 }