1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-27 12:41:57 +03:00

Add PROCESS_MAIN to VACUUM

Disabling this option is useful to run VACUUM (with or without FULL) on
only the toast table of a relation, bypassing the main relation.  This
option is enabled by default.

Running directly VACUUM on a toast table was already possible without
this feature, by using the non-deterministic name of a toast relation
(as of pg_toast.pg_toast_N, where N would be the OID of the parent
relation) in the VACUUM command, and it required a scan of pg_class to
know the name of the toast table.  So this feature is basically a
shortcut to be able to run VACUUM or VACUUM FULL on a toast relation,
using only the name of the parent relation.

A new switch called --no-process-main is added to vacuumdb, to work as
an equivalent of PROCESS_MAIN.

Regression tests are added to cover VACUUM and VACUUM FULL, looking at
pg_stat_all_tables.vacuum_count to see how many vacuums have run on
each table, main or toast.

Author: Nathan Bossart
Reviewed-by: Masahiko Sawada
Discussion: https://postgr.es/m/20221230000028.GA435655@nathanxps13
This commit is contained in:
Michael Paquier
2023-03-06 16:41:05 +09:00
parent 46d490ac19
commit 4211fbd841
10 changed files with 156 additions and 15 deletions

View File

@ -33,6 +33,7 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ <replaceable class="paramet
DISABLE_PAGE_SKIPPING [ <replaceable class="parameter">boolean</replaceable> ]
SKIP_LOCKED [ <replaceable class="parameter">boolean</replaceable> ]
INDEX_CLEANUP { AUTO | ON | OFF }
PROCESS_MAIN [ <replaceable class="parameter">boolean</replaceable> ]
PROCESS_TOAST [ <replaceable class="parameter">boolean</replaceable> ]
TRUNCATE [ <replaceable class="parameter">boolean</replaceable> ]
PARALLEL <replaceable class="parameter">integer</replaceable>
@ -238,6 +239,18 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ <replaceable class="paramet
</listitem>
</varlistentry>
<varlistentry>
<term><literal>PROCESS_MAIN</literal></term>
<listitem>
<para>
Specifies that <command>VACUUM</command> should attempt to process the
main relation. This is usually the desired behavior and is the default.
Setting this option to false may be useful when it is only necessary to
vacuum a relation's corresponding <literal>TOAST</literal> table.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>PROCESS_TOAST</literal></term>
<listitem>

View File

@ -317,6 +317,21 @@ PostgreSQL documentation
</listitem>
</varlistentry>
<varlistentry>
<term><option>--no-process-main</option></term>
<listitem>
<para>
Skip the main relation.
</para>
<note>
<para>
This option is only available for servers running
<productname>PostgreSQL</productname> 16 and later.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--no-process-toast</option></term>
<listitem>