diff --git a/contrib/pg_upgrade/info.c b/contrib/pg_upgrade/info.c
new file mode 100644
index 9d08f41..c406941
*** a/contrib/pg_upgrade/info.c
--- b/contrib/pg_upgrade/info.c
*************** gen_db_file_maps(DbInfo *old_db, DbInfo
*** 40,53 ****
  	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++)
  	{
  		RelInfo    *old_rel = &old_db->rel_arr.rels[relnum];
  		RelInfo    *new_rel = &new_db->rel_arr.rels[relnum];
--- 40,50 ----
  	int			relnum;
  	int			num_maps = 0;
  
  	maps = (FileNameMap *) pg_malloc(sizeof(FileNameMap) *
  									 old_db->rel_arr.nrels);
  
! 	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];
*************** gen_db_file_maps(DbInfo *old_db, DbInfo
*** 78,83 ****
--- 75,85 ----
  		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;
  }
