Does *every* table have *so much* free space that it's impractical to
just
let the files just get refilled by normal usage?
Ideally VACUUM FULL should not require a giant lock on the table.
Sometimes a table's usage pattern involves much more updates than
inserts, which gradually uses more and more unused space that is never
used again by postgres, and plain autovacuuming doesn't return it to the
OS. So DB size (as witnessed by psql's \l+) uses 5-6x times the space it
actually needs. And using vacuum full is prohibitive because of the
exclusive lock it takes on the table, preventing both writes and reads.
Since rewriting a table is a completely internal operation from clients'
POV, hopefully one day we will see a concurrent version of vacuum full.