Hi, I found that "vacuumdb --missing-stats-only" always performs ANALYZE on tables with a virtual generated column, since such columns currently never have statistics. This seems like an obvious waste, so I've attached a patch to fix it, ensuring that virtual generated columns are not regarded as missing statistics.
Regards, Yugo Nagata -- Yugo Nagata <[email protected]>
>From 21d05a07657969032a1ab3c3b8f84edfc8551b86 Mon Sep 17 00:00:00 2001 From: Yugo Nagata <[email protected]> Date: Wed, 20 Aug 2025 10:41:49 +0900 Subject: [PATCH] Don't treat virtual generated columns as missing statistics in vacuumdb --missing-stats-only --- src/bin/scripts/vacuumdb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index 79b1096eb08..71a58efff30 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -14,6 +14,7 @@ #include <limits.h> +#include "catalog/pg_attribute_d.h" #include "catalog/pg_class_d.h" #include "common.h" #include "common/connect.h" @@ -957,6 +958,8 @@ 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 a.attgenerated OPERATOR(pg_catalog.<>) " + CppAsString2(ATTRIBUTE_GENERATED_VIRTUAL) "\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" -- 2.43.0
