pg_upgrade: set vacuum_defer_cleanup_age to zero
authorBruce Momjian <[email protected]>
Tue, 16 Jun 2020 00:59:40 +0000 (20:59 -0400)
committerBruce Momjian <[email protected]>
Tue, 16 Jun 2020 00:59:40 +0000 (20:59 -0400)
Non-zero vacuum_defer_cleanup_age values cause pg_upgrade freezing of
the system catalogs to be incomplete, or do nothing.  This will cause
the upgrade to fail in confusing ways.

Reported-by: Laurenz Albe
Discussion: https://postgr.es/m/7d6f6c22ba05ce0c526e9e8b7bfa8105e7da45e6[email protected]

Backpatch-through: 9.5

src/bin/pg_upgrade/server.c

index c59da91f9df3289ce1bdcdd3039efc1bcbf0f086..17a9b7436adf009b43ca078e8ba681ea98ab2d9b 100644 (file)
@@ -231,6 +231,9 @@ start_postmaster(ClusterInfo *cluster, bool throw_error)
     * we only modify the new cluster, so only use it there.  If there is a
     * crash, the new cluster has to be recreated anyway.  fsync=off is a big
     * win on ext4.
+    *
+    * Force vacuum_defer_cleanup_age to 0 on the new cluster, so that
+    * vacuumdb --freeze actually freezes the tuples.
     */
    snprintf(cmd, sizeof(cmd),
          "\"%s/pg_ctl\" -w -l \"%s\" -D \"%s\" -o \"-p %d%s%s %s%s\" start",
@@ -239,7 +242,7 @@ start_postmaster(ClusterInfo *cluster, bool throw_error)
              BINARY_UPGRADE_SERVER_FLAG_CAT_VER) ? " -b" :
             " -c autovacuum=off -c autovacuum_freeze_max_age=2000000000",
             (cluster == &new_cluster) ?
-     " -c synchronous_commit=off -c fsync=off -c full_page_writes=off" : "",
+     " -c synchronous_commit=off -c fsync=off -c full_page_writes=off -c vacuum_defer_cleanup_age=0" : "",
             cluster->pgopts ? cluster->pgopts : "", socket_string);
 
    /*