The statement from the documentation is true, but misleading. Autovacuum does not process the partitioned table itself, but it processes the partitions, which are regular PostgreSQL tables. So dead tuples get removed, the visibility map gets updated, and so on. In short, there is nothing to worry about as far as vacuuming is concerned. Remember that the partitioned table itself does not hold any data!

What the documentation warns you about is ANALYZE. Autovacuum also launches automatic ANALYZE jobs to collect accurate table statistics. This will be work fine on the partitions, but there are no table statistics collected on the partitioned table itself, so you have to run ANALYZE manually on the partitioned table to get these data. In practice, I find that not to be a problem, since the optimizer generates plans for each individual partition anyway, and there it has accurate statistics.

Answer from Laurenz Albe on Stack Overflow
🌐
Reddit
reddit.com › r/postgresql › postgresql 11 : partitions and vacuuming
r/PostgreSQL on Reddit: Postgresql 11 : partitions and vacuuming
March 23, 2020 -

Been Googling for a couple of hours. Can't seem to find if one can just vacuum certain partitions of a partitioned table. It seems like you can vacuum the table, but I've got a HUGE table (partitions by day and each day is several hundred gigs) and when we run our vacuumdb command, it takes forever.

So we thought that we'd split up the vacuuming, and do some tables on Monday, some on Tuesday etc. But there's this one table that we'd like to NOT do all at once.

Now we're moving to native partitioning but aren't there yet. However I don't think that this changes the ability (or not) of being able to vacuum a partition, but I'd be happy to learn otherwise.

🌐
Reddit
reddit.com › r/postgresql › vacuum analyze partitioned table
r/PostgreSQL on Reddit: Vacuum analyze partitioned table
August 24, 2021 -

Hello,

When working with table declarative partitioning, do you have to `vacuum analyze` newly added partitions or you can directly do it on the parent table?

When reading the documentation, it has to be done for table partitioning using inheritance but it is not specified for declarative partitioning.

For context, I have a daily ingestion process that pushes new data into a partition table. For each batch, it lists the incoming dates, drops the related partitions, creates new empty partitions and loads the data into the parent table that reroutes them into the appropriate partitions. I then run `vacuum analyze` on each newly created partition.

Thanks!

🌐
PostgreSQL
postgresql.org › docs › current › routine-vacuuming.html
PostgreSQL: Documentation: 18: 24.1. Routine Vacuuming
May 14, 2026 - You can work around this problem by manually running ANALYZE on partitioned tables when they are first populated, and again whenever the distribution of data in their partitions changes significantly. Temporary tables cannot be accessed by autovacuum. Therefore, appropriate vacuum and analyze operations should be performed via session SQL commands. The default thresholds and scale factors are taken from postgresql.conf, but it is possible to override them (and many other autovacuum control parameters) on a per-table basis; see Storage Parameters for more information.
🌐
CYBERTEC PostgreSQL
cybertec-postgresql.com › home › partitioned table statistics
Partitioned table statistics | CYBERTEC PostgreSQL | Services & Support
September 29, 2025 - Each of the partitions will receive half of the rows I INSERT into the table: ... With the default configuration, the autovacuum launcher will sleep for up to a minute before becoming active. Then it will process our new tables and run VACUUM and ANALYZE. So let's wait for two minutes before we take a look at the statistics: ... PostgreSQL has statistics for the partitions, but no partitioned table statistics!
🌐
EnterpriseDB
enterprisedb.com › blog › containing-bloat-partitions
EDB Tutorial: How To Contain Bloat with Partitions | EDB
Since the updates are taking place in the Hot partitions, those get bloated, but their sizes are much smaller than the whole table. Vacuuming those doesn't take as much time as the whole table. Once they become Cold, they hardly need any Vacuuming. Thus containing the bloat effectively. In PostgreSQL autovacuum, if enabled on the given table, runs its job when the number of inserted, deleted, or updated rows are above certain thresholds (see details).
🌐
Narkive
pgsql-admin.postgresql.narkive.com › b5mo6yUo › admin-partitioned-tables-vs-vacuum-reindex
[ADMIN] Partitioned Tables vs Vacuum+Reindex
If I partition my table will be fast the vacuum process? Can I only vacuum the main partitioned table and the the historical out of the maintenance? Thanks. Edgar You may still have to vacuum the entire partition set, although you could split it up to vacuum the individual children instead of the whole thing, so it's not one long transaction.
🌐
PostgreSQL
postgresql.org › docs › current › sql-vacuum.html
PostgreSQL: Documentation: 18: VACUUM
May 14, 2026 - VACUUM reclaims storage occupied by dead tuples. In normal PostgreSQL operation, tuples that are deleted or obsoleted by an update are not physically removed from their table; they remain present until a VACUUM is done.
Find elsewhere
🌐
Postgres Professional
postgrespro.com › list › thread-id › 2556154
Thread: How does vacuum full works if table is partitioned? : Postgres Professional
On Wed, 16 Jun 2021 at 18:37, kaido vaikla <kaido.vaikla@gmail.com> wrote: > > Hi, > > Will VACUUM FULL create all new partitions at once and removes all together if vacuum is done or does it per partition?Or something third? > I think it is one partition at a time. *********************** # in session [1] do the setup postgres=# create table t(id int, value int) partition by list(id) with (autovacuum_enabled = off); CREATE TABLE postgres=# create table t1 partition of t for values in (1) with (autovacuum_enabled = off); CREATE TABLE postgres=# create table t2 partition of t for values in (2)
🌐
Stack Exchange
dba.stackexchange.com › questions › 223110 › how-to-vacuum-full-a-single-partition-without-stalling-the-parent
postgresql - How to VACUUM FULL a single partition without stalling the parent? - Database Administrators Stack Exchange
My current solution is to detach TABLE_A_201810, do the VACUUM and then re-attach. ... UPDATE Using version 10.5, partitioning by range. I'm doing a VACUUM FULL because thats the only way (that I know of) of returning free space to the OS. It also provides the best way of managing disk space (or in otherwords, it's the only way of checking how much free space is really available) ... Please start any such question by disclosing the version of Postgres you use.
🌐
Medium
medium.com › gett-engineering › scaling-postgresql-check-your-vacuum-f03092a6399e
Scaling PostgreSQL: Check your Vacuum! | by Stas Panchenko | Gett Tech | Medium
March 28, 2019 - In case of an update, Postgres creates a new row and marks the old one for deletion. The physical deletion of the row is done by the auto vacuum process, which runs whenever it reaches some dead-rows-per-table threshold. You can run the following query to find the number of dead rows per table: At this point, it was obvious partitions alone aren’t going to cut it.
🌐
Stack Overflow
stackoverflow.com › questions › 52726595 › postgresql-autovacuum-partitioned-table
partition - Postgresql autovacuum partitioned table - Stack Overflow
October 9, 2018 - select name,setting from pg_settings where name like '%vacuum%' order by name; name | setting -------------------------------------+----------- autovacuum | on autovacuum_analyze_scale_factor | 0.05 autovacuum_analyze_threshold | 50 autovacuum_freeze_max_age | 450000000 autovacuum_max_workers | 3 autovacuum_multixact_freeze_max_age | 400000000 autovacuum_naptime | 30 autovacuum_vacuum_cost_delay | 20 autovacuum_vacuum_cost_limit | -1 autovacuum_vacuum_scale_factor | 0.1 autovacuum_vacuum_threshold | 50 autovacuum_work_mem | -1 log_autovacuum_min_duration | 0 rds.force_autovacuum_logging_level
🌐
PostgreSQL
postgresql.org › message-id › CA+427g8ChFkbbjP7GjFe5Dfe94D0Le8R+jky1+e6x2kpJX7dwQ@mail.gmail.com
PostgreSQL: Re: How does vacuum full works if table is partitioned?
June 16, 2021 - > On Wed, 16 Jun 2021 at 18:37, kaido vaikla <kaido(dot)vaikla(at)gmail(dot)com> wrote: > > > > Hi, > > > > Will VACUUM FULL create all new partitions at once and removes all > together if vacuum is done or does it per partition? Or something third? > > > > > I think it is one partition at a time. > > *********************** > # in session [1] do the setup > > postgres=# create table t(id int, value int) partition by list(id) > with (autovacuum_enabled = off); > CREATE TABLE > postgres=# create table t1 partition of t for values in (1) with > (autovacuum_enabled = off); > CREATE TABLE > postgr
🌐
Postgres Professional
postgrespro.com › list › thread-id › 1161615
Thread: vacuum / analyze parent tables on partitioned tables. : Postgres Professional
Vaccum analyze operation would be a time consuming activity when it operates on partitioned table in parent and child relationship by using a manual vaccum option. When vaccum operation is performed the total vacuum/analyze time would be total time on completion of the said actvity on all child table in spite of parent table is empty.
🌐
Postgres Professional
postgrespro.com › docs › postgresql › 13 › sql-vacuum
PostgreSQL : Documentation: 13: VACUUM : Postgres Professional
The name (optionally schema-qualified) of a specific table or materialized view to vacuum. If the specified table is a partitioned table, all of its leaf partitions are vacuumed.
🌐
Postgres Professional
postgrespro.com › docs › postgresql › 12 › sql-vacuum
PostgreSQL : Documentation: 12: VACUUM : Postgres Professional
The name (optionally schema-qualified) of a specific table or materialized view to vacuum. If the specified table is a partitioned table, all of its leaf partitions are vacuumed.
🌐
Stack Exchange
dba.stackexchange.com › questions › 225615 › does-vacuum-full-analyze-a-partition-locks-the-main-table-in-postgresql
Does VACUUM FULL ANALYZE a partition locks the main table in postgresql? - Database Administrators Stack Exchange
December 27, 2018 - VACUUM FREEZE takes up a Share Update Exclusive Lock, so even if your main table also gets locked in this mode, concurrent reads and writes still work.
🌐
Postgres Professional
postgrespro.com › list › thread-id › 2623036
Thread: Autovacuum on Partitioned Tables : Postgres Professional
There is a statement in the Postgres Docs: "Partitioned tables are not processed by autovacuum." ... Does autovacuum not process both the parent and the child tables in a partition relationship? Partitioned (aka parent) tables are "virtual". There's nothing to vacuum are analyze.
🌐
pg_tileserv
access.crunchydata.com › documentation › postgresql12 › 12.6 › sql-vacuum.html
vacuum - PostgreSQL
VACUUM reclaims storage occupied by dead tuples. In normal PostgreSQL operation, tuples that are deleted or obsoleted by an update are not physically removed from their table; they remain present until a VACUUM is done.
🌐
PostgreSQL
postgresql.org › docs › current › ddl-partitioning.html
PostgreSQL: Documentation: 18: 5.12. Table Partitioning
May 14, 2026 - The schemes shown here assume that the values of a row's key column(s) never change, or at least do not change enough to require it to move to another partition. An UPDATE that attempts to do that will fail because of the CHECK constraints. If you need to handle such cases, you can put suitable update triggers on the child tables, but it makes management of the structure much more complicated. Manual VACUUM and ANALYZE commands will automatically process all inheritance child tables.