The architecture is described here:
15 karma · joined November 18, 2008
If the autovacuum process is run too infrequently, the space used by the tables grows larger and there are many gaps between used rows. In addition to filling up more disk space than necessary this reduces sequencial scan performance. In this case you should run a vacuum full which packs the table and relases the unused space to the operating system (think of file system defragmentation). Unfortunately this is quite slow and uses table locks so you should not do it on a production system.
[EDIT:] From the awesome postgres documentation:
http://www.postgresql.org/docs/current/static/routine-vacuum...