diff --git a/contrib/pg_upgrade/relfilenode.c b/contrib/pg_upgrade/relfilenode.c index 382588f191..d67d01fea9 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,