]> granicus.if.org Git - postgresql/commitdiff
Adjust pg_upgrade "new database skip" code, e.g. 'postgres', to more
authorBruce Momjian <bruce@momjian.us>
Thu, 3 Nov 2011 17:56:56 +0000 (13:56 -0400)
committerBruce Momjian <bruce@momjian.us>
Thu, 3 Nov 2011 17:57:52 +0000 (13:57 -0400)
cleanly handle old/new database mismatches.

contrib/pg_upgrade/relfilenode.c

index 382588f19165981f9fa5b4d62f3ade873dbe4e58..d67d01fea943f3d48576d6e834c37f9397fa6009 100644 (file)
@@ -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,