diff --git a/contrib/pg_upgrade/info.c b/contrib/pg_upgrade/info.c
index dbbc143fa2d621a02e7a59a09e09c5116bf4af46..74c9da13c6743f04c21ba85f62bdfd5dc017649c 100644
--- a/contrib/pg_upgrade/info.c
+++ b/contrib/pg_upgrade/info.c
@@ -147,8 +147,7 @@ get_db_and_rel_infos(ClusterInfo *cluster)
 {
 	int			dbnum;
 
-	if (cluster->dbarr)
-		free_db_and_rel_infos(cluster->dbarr);
+	free_db_and_rel_infos(&cluster->dbarr);
 
 	get_db_infos(cluster);
 
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c
index e93ac3ba8c5b8bf5b2ebd48cee8c910ba284039d..abde25915dce174a81919c6d65e80b3ec352991d 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/contrib/pg_upgrade/pg_upgrade.c
@@ -64,6 +64,8 @@ main(int argc, char **argv)
 	bool		live_check = false;
 
 	parseCommandLine(argc, argv);
+	old_cluster.dbarr.ndbs = 0;
+	new_cluster.dbarr.ndbs = 0;
 
 	output_check_banner(&live_check);