diff --git a/contrib/pg_upgrade/relfilenode.c b/contrib/pg_upgrade/relfilenode.c
index 382588f19165981f9fa5b4d62f3ade873dbe4e58..d67d01fea943f3d48576d6e834c37f9397fa6009 100644
--- a/contrib/pg_upgrade/relfilenode.c
+++ b/contrib/pg_upgrade/relfilenode.c
@@ -41,11 +41,10 @@ transfer_all_new_dbs(DbInfoArr *old_db_arr,
 
 	/* 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 < old_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];
+		DbInfo	   *old_db = &old_db_arr->dbs[old_dbnum], *new_db;
 		FileNameMap *mappings;
 		int			n_maps;
 		pageCnvCtx *pageConverter = NULL;
@@ -55,13 +54,16 @@ transfer_all_new_dbs(DbInfoArr *old_db_arr,
 		 *	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];
+		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 (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);
+		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,