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