pg_upgrade: start/stop new server after pg_resetwal
authorBruce Momjian <[email protected]>
Tue, 20 Jun 2017 17:20:02 +0000 (13:20 -0400)
committerBruce Momjian <[email protected]>
Tue, 20 Jun 2017 17:20:10 +0000 (13:20 -0400)
When commit 0f33a719fdbb5d8c43839ea0d2c90cd03e2af2d2 removed the
instructions to start/stop the new cluster before running rsync, it was
now possible for pg_resetwal/pg_resetxlog to leave the final WAL record
at wal_level=minimum, preventing upgraded standby servers from
reconnecting.

This patch fixes that by having pg_upgrade unconditionally start/stop
the new cluster after pg_resetwal/pg_resetxlog has run.

Backpatch through 9.2 since, though the instructions were added in PG
9.5, they worked all the way back to 9.2.

Discussion: https://postgr.es/m/20170620171844[email protected]

Backpatch-through: 9.2

src/bin/pg_upgrade/check.c
src/bin/pg_upgrade/pg_upgrade.c
src/bin/pg_upgrade/pg_upgrade.h

index 8b9e81eb407521be8bf02142c3d542e372f110e8..b79e54a2dc70211c04d8fcf3cf9a889f500020b7 100644 (file)
@@ -174,23 +174,25 @@ report_clusters_compatible(void)
 
 
 void
-issue_warnings(void)
+issue_warnings_and_set_wal_level(void)
 {
+   /*
+    * We unconditionally start/stop the new server because pg_resetwal -o
+    * set wal_level to 'minimum'.  If the user is upgrading standby
+    * servers using the rsync instructions, they will need pg_upgrade
+    * to write its final WAL record showing wal_level as 'replica'.
+    */
+   start_postmaster(&new_cluster, true);
+
    /* Create dummy large object permissions for old < PG 9.0? */
    if (GET_MAJOR_VERSION(old_cluster.major_version) <= 804)
-   {
-       start_postmaster(&new_cluster, true);
        new_9_0_populate_pg_largeobject_metadata(&new_cluster, false);
-       stop_postmaster(false);
-   }
 
    /* Reindex hash indexes for old < 10.0 */
    if (GET_MAJOR_VERSION(old_cluster.major_version) <= 906)
-   {
-       start_postmaster(&new_cluster, true);
        old_9_6_invalidate_hash_indexes(&new_cluster, false);
-       stop_postmaster(false);
-   }
+
+   stop_postmaster(false);
 }
 
 
index ca1aa5cbb80f4e9e300cc6b2b5ad4b171760c060..2a9c397277cb53028299dbd52d2ffa6737414480 100644 (file)
@@ -162,7 +162,7 @@ main(int argc, char **argv)
    create_script_for_cluster_analyze(&analyze_script_file_name);
    create_script_for_old_cluster_deletion(&deletion_script_file_name);
 
-   issue_warnings();
+   issue_warnings_and_set_wal_level();
 
    pg_log(PG_REPORT, "\nUpgrade Complete\n");
    pg_log(PG_REPORT, "----------------\n");
index 8fbf8acd7eb1886bab47d409fe9b1ec4622f7a88..e3a577a7823e16c1a52568377c464d6b6f692589 100644 (file)
@@ -332,7 +332,7 @@ void        output_check_banner(bool live_check);
 void       check_and_dump_old_cluster(bool live_check);
 void       check_new_cluster(void);
 void       report_clusters_compatible(void);
-void       issue_warnings(void);
+void       issue_warnings_and_set_wal_level(void);
 void output_completion_banner(char *analyze_script_file_name,
                         char *deletion_script_file_name);
 void       check_cluster_versions(void);