From: Bruce Momjian <bruce@momjian.us>
Date: Tue, 20 Jun 2017 17:20:02 +0000 (-0400)
Subject: pg_upgrade:  start/stop new server after pg_resetwal
X-Git-Tag: REL9_2_22~39
X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=65beccae51fc0bc51cd53651f36b7486902869fb;p=postgresql.git

pg_upgrade:  start/stop new server after pg_resetwal

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.GC24975@momjian.us

Backpatch-through: 9.2
---

diff --git a/contrib/pg_upgrade/check.c b/contrib/pg_upgrade/check.c
index 7c4f2b98bbf..140a2b6ec55 100644
--- a/contrib/pg_upgrade/check.c
+++ b/contrib/pg_upgrade/check.c
@@ -202,13 +202,19 @@ report_clusters_compatible(void)
 
 
 void
-issue_warnings(char *sequence_script_file_name)
+issue_warnings_and_set_wal_level(char *sequence_script_file_name)
 {
+	/*
+	 * 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 with the proper wal_level.
+	 */
+	start_postmaster(&new_cluster);
+
 	/* old = PG 8.3 warnings? */
 	if (GET_MAJOR_VERSION(old_cluster.major_version) <= 803)
 	{
-		start_postmaster(&new_cluster);
-
 		/* restore proper sequence values using file created from old server */
 		if (sequence_script_file_name)
 		{
@@ -224,16 +230,13 @@ issue_warnings(char *sequence_script_file_name)
 		old_8_3_rebuild_tsvector_tables(&new_cluster, false);
 		old_8_3_invalidate_hash_gin_indexes(&new_cluster, false);
 		old_8_3_invalidate_bpchar_pattern_ops_indexes(&new_cluster, false);
-		stop_postmaster(false);
 	}
 
 	/* Create dummy large object permissions for old < PG 9.0? */
 	if (GET_MAJOR_VERSION(old_cluster.major_version) <= 804)
-	{
-		start_postmaster(&new_cluster);
 		new_9_0_populate_pg_largeobject_metadata(&new_cluster, false);
-		stop_postmaster(false);
-	}
+
+	stop_postmaster(false);
 }
 
 
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c
index 752c821b11c..eff1e9826fe 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/contrib/pg_upgrade/pg_upgrade.c
@@ -163,7 +163,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(sequence_script_file_name);
+	issue_warnings_and_set_wal_level(sequence_script_file_name);
 
 	pg_log(PG_REPORT, "\nUpgrade Complete\n");
 	pg_log(PG_REPORT, "----------------\n");
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
index 6a968ea719e..6d0f7252e22 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/contrib/pg_upgrade/pg_upgrade.h
@@ -301,7 +301,7 @@ void check_old_cluster(bool live_check,
 				  char **sequence_script_file_name);
 void		check_new_cluster(void);
 void		report_clusters_compatible(void);
-void		issue_warnings(char *sequence_script_file_name);
+void		issue_warnings_and_set_wal_level(char *sequence_script_file_name);
 void output_completion_banner(char *analyze_script_file_name,
 						 char *deletion_script_file_name);
 void		check_cluster_versions(void);