]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
CREATE INDEX: do update index stats if autovacuum=off.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 10 Mar 2025 21:49:27 +0000 (17:49 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 10 Mar 2025 21:49:27 +0000 (17:49 -0400)
This fixes a thinko from commit d611f8b15.  The intent was to prevent
updating the stats of the pre-existing heap if autovacuum is off,
but it also disabled updating the stats of the just-created index.
There is AFAICS no good reason to do the latter, since there could not
be any pre-existing stats to refrain from overwriting, and the zeroed
stats that are there to begin with are very unlikely to be useful.
Moreover, the change broke our cross-version upgrade tests again.

Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/1116282.1741374848@sss.pgh.pa.us

src/backend/catalog/index.c

index 022b9b99b13dfb2855ae5f305a83d3b38074d39f..739a92bdcc1ca060a52df0955dab4cf8fc0cd529 100644 (file)
@@ -2847,20 +2847,20 @@ index_update_stats(Relation rel,
         * statistics, as the table statistics may be restored before the index is
         * created, and we want to preserve the restored table statistics.
         */
-       if (AutoVacuumingActive())
+       if (rel->rd_rel->relkind == RELKIND_RELATION ||
+               rel->rd_rel->relkind == RELKIND_TOASTVALUE ||
+               rel->rd_rel->relkind == RELKIND_MATVIEW)
        {
-               if (rel->rd_rel->relkind == RELKIND_RELATION ||
-                       rel->rd_rel->relkind == RELKIND_TOASTVALUE ||
-                       rel->rd_rel->relkind == RELKIND_MATVIEW)
+               if (AutoVacuumingActive())
                {
                        StdRdOptions *options = (StdRdOptions *) rel->rd_options;
 
                        if (options != NULL && !options->autovacuum.enabled)
                                update_stats = false;
                }
+               else
+                       update_stats = false;
        }
-       else
-               update_stats = false;
 
        /*
         * Finish I/O and visibility map buffer locks before