]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
vacuumdb: Fix --missing-stats-only for partitioned indexes.
authorNathan Bossart <nathan@postgresql.org>
Wed, 17 Jun 2026 14:18:39 +0000 (09:18 -0500)
committerNathan Bossart <nathan@postgresql.org>
Wed, 17 Jun 2026 14:18:39 +0000 (09:18 -0500)
The current form of the catalog query picks up partitioned tables
with expression indexes that lack statistics.  However, since such
indexes never have statistics, there's no point in analyzing them.
To fix, adjust the relevant part of the query to skip partitioned
tables with expression indexes.  While at it, remove the nearby
stainherit check; entries for index expressions always have
stainherit = false.

Author: Baji Shaik <baji.pgdev@gmail.com>
Reviewed-by: Corey Huinker <corey.huinker@gmail.com>
Discussion: https://postgr.es/m/CA%2Bfm-RPE1tEc6CUUPDyRbYTz9tF5Kw47nnk-Zq%3DyYvanbsxyCQ%40mail.gmail.com
Backpatch-through: 18

src/bin/scripts/t/100_vacuumdb.pl
src/bin/scripts/vacuuming.c

index 5fd55628507200513a9c0193feb6687f65a6cce7..58e38971b3d9372cd02aeaa8f81ebb4bf0d5d772 100644 (file)
@@ -336,6 +336,7 @@ $node->issues_sql_unlike(
 $node->safe_psql('postgres',
        "CREATE TABLE regression_vacuumdb_parted (a INT) PARTITION BY LIST (a);\n"
          . "CREATE TABLE regression_vacuumdb_part1 PARTITION OF regression_vacuumdb_parted FOR VALUES IN (1);\n"
+         . "CREATE INDEX ON regression_vacuumdb_parted ((a + 1));\n"
          . "INSERT INTO regression_vacuumdb_parted VALUES (1);\n"
          . "ANALYZE regression_vacuumdb_part1;\n");
 $node->issues_sql_like(
index 37608806056efe37aa167d857c6aab85d47a6335..67a7665c5d7fafbed858cd3adc4c6f6ae02e7402 100644 (file)
@@ -738,10 +738,10 @@ retrieve_objects(PGconn *conn, vacuumingOptions *vacopts,
                                                         " AND a.attnum OPERATOR(pg_catalog.>) 0::pg_catalog.int2\n"
                                                         " AND NOT a.attisdropped\n"
                                                         " AND a.attstattarget IS DISTINCT FROM 0::pg_catalog.int2\n"
+                                                        " AND NOT p.inherited\n"
                                                         " AND NOT EXISTS (SELECT NULL FROM pg_catalog.pg_statistic s\n"
                                                         " WHERE s.starelid OPERATOR(pg_catalog.=) a.attrelid\n"
-                                                        " AND s.staattnum OPERATOR(pg_catalog.=) a.attnum\n"
-                                                        " AND s.stainherit OPERATOR(pg_catalog.=) p.inherited))\n");
+                                                        " AND s.staattnum OPERATOR(pg_catalog.=) a.attnum))\n");
 
                /* inheritance and regular stats */
                appendPQExpBufferStr(&catalog_query,