PostgreSQL Vacuum and Vacuum full are not two different processes
PostgreSQL’s VACUUM and VACUUM FULL are not separate processes but rather different operational modes of the same maintenance command. Here’s why: Core Implementation Both commands share the same underlying codebase and are executed through the vacuum_rel() function in PostgreSQL’s source code ( src/backend/commands/vacuum.c ). The key distinction lies in the FULL option, which triggers additional steps: Standard VACUUM : Removes dead tuples (obsolete rows) and marks space reusable within PostgreSQL Updates the visibility map to optimize future queries Runs concurrently with read/write operations VACUUM FULL : Rewrites the entire table into a new disk file, compressing it and reclaiming space for the operating system Rebuilds all indexes and requires an ACCESS EXCLUSIVE lock, blocking other operations Key Differences in Behavior Aspect Standard VACUUM VACUUM FULL Space Reclamation Internal reuse onl...