And future updates can reuse it, too (an update is very similar to an insert+delete).
Hm, then it's strange our DB takes 6 times as much space compared to freshly restored one (only public schema is considered).
Not if autovacuum has a chance to run between updates.
Ours is run regularly, although we had to tweak it down not to interfere with normal database activity, so it takes several hours each run on the table. We did that by setting autovacuum_vacuum_scale_factor = 0.05 from default 0.2.