Skip to content

Commit 984d716

Browse files
Document privileges required for vacuumdb --missing-stats-only.
When vacuumdb's --missing-stats-only option is used, the catalog query for retrieving the list of relations to process must read pg_statistic and pg_statistic_ext_data. However, those catalogs can only be read by superusers by default, so --missing-stats-only is effectively superuser-only. This is unfortunate, but since the option is primarily intended for use by administrators after running pg_upgrade, let's just live with it for v18. This commit adds a note about the aforementioned privilege requirements to the documentation for --missing-stats-only. We first tried to improve matters by modifying the query to read the pg_stats and pg_stats_ext system views instead. While that is indeed more lenient from a privilege standpoint, it is also borderline incomprehensible. pg_stats shows rows for which the user has the SELECT privilege on the corresponding column, and pg_stats_ext shows rows for tables the user owns. Meanwhile, ANALYZE requires either MAINTAIN on the table or, for non-shared relations, ownership of the database. But even if the privilege discrepancies were tolerable, the performance impact was not. Ultimately, the modified query was substantially more expensive, so we abandoned the idea. For v19, perhaps we could introduce a simple, inexpensive way to discover which relations are missing statistics, such as a system function or view with similar privilege requirements to ANALYZE. Unfortunately, it is far too late for anything like that in v18. Reviewed-by: Yugo Nagata <nagata@sraoss.co.jp> Reviewed-by: Fujii Masao <masao.fujii@gmail.com> Discussion: https://postgr.es/m/CAHGQGwHh43suEfss1wvBsk7vqiou%3DUY0zcy8HGyE5hBp%2BHZ7SQ%40mail.gmail.com Backpatch-through: 18
1 parent 327b732 commit 984d716

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

doc/src/sgml/ref/vacuumdb.sgml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,14 @@ PostgreSQL documentation
292292
This option can only be used in conjunction with
293293
<option>--analyze-only</option> or <option>--analyze-in-stages</option>.
294294
</para>
295+
<para>
296+
Note that <option>--missing-stats-only</option> requires
297+
<literal>SELECT</literal> privileges on
298+
<link linkend="catalog-pg-statistic"><structname>pg_statistic</structname></link>
299+
and
300+
<link linkend="catalog-pg-statistic-ext-data"><structname>pg_statistic_ext_data</structname></link>,
301+
which are restricted to superusers by default.
302+
</para>
295303
</listitem>
296304
</varlistentry>
297305

0 commit comments

Comments
 (0)