diff --git a/contrib/pg_upgrade/relfilenode.c b/contrib/pg_upgrade/relfilenode.c
new file mode 100644
index 382588f..d67d01f
*** a/contrib/pg_upgrade/relfilenode.c
--- b/contrib/pg_upgrade/relfilenode.c
*************** transfer_all_new_dbs(DbInfoArr *old_db_a
*** 41,51 ****
  
  	/* Scan the old cluster databases and transfer their files */
  	for (old_dbnum = new_dbnum = 0;
! 		 old_dbnum < old_db_arr->ndbs && new_dbnum < new_db_arr->ndbs;
  		 old_dbnum++, new_dbnum++)
  	{
! 		DbInfo	   *old_db = &old_db_arr->dbs[old_dbnum];
! 		DbInfo	   *new_db = &new_db_arr->dbs[new_dbnum];
  		FileNameMap *mappings;
  		int			n_maps;
  		pageCnvCtx *pageConverter = NULL;
--- 41,50 ----
  
  	/* Scan the old cluster databases and transfer their files */
  	for (old_dbnum = new_dbnum = 0;
! 		 old_dbnum < old_db_arr->ndbs;
  		 old_dbnum++, new_dbnum++)
  	{
! 		DbInfo	   *old_db = &old_db_arr->dbs[old_dbnum], *new_db;
  		FileNameMap *mappings;
  		int			n_maps;
  		pageCnvCtx *pageConverter = NULL;
*************** transfer_all_new_dbs(DbInfoArr *old_db_a
*** 55,67 ****
  		 *	but not in the old, e.g. "postgres".  (The user might
  		 *	have removed the 'postgres' database from the old cluster.)
  		 */
! 		while (strcmp(old_db->db_name, new_db->db_name) != 0 &&
! 			   new_dbnum < new_db_arr->ndbs)
! 			new_db = &new_db_arr->dbs[++new_dbnum];
  
! 		if (strcmp(old_db->db_name, new_db->db_name) != 0)
! 			pg_log(PG_FATAL, "old and new databases have different names: old \"%s\", new \"%s\"\n",
! 				   old_db->db_name, new_db->db_name);
  
  		n_maps = 0;
  		mappings = gen_db_file_maps(old_db, new_db, &n_maps, old_pgdata,
--- 54,69 ----
  		 *	but not in the old, e.g. "postgres".  (The user might
  		 *	have removed the 'postgres' database from the old cluster.)
  		 */
! 		for (; new_dbnum < new_db_arr->ndbs; new_dbnum++)
! 		{
! 			new_db = &new_db_arr->dbs[new_dbnum];
! 			if (strcmp(old_db->db_name, new_db->db_name) == 0)
! 				break;
! 		}
  
! 		if (new_dbnum >= new_db_arr->ndbs)
! 			pg_log(PG_FATAL, "old database \"%s\" not found in the new cluster\n",
! 				   old_db->db_name);
  
  		n_maps = 0;
  		mappings = gen_db_file_maps(old_db, new_db, &n_maps, old_pgdata,
