Ed L. wrote:
One idea would be to partition the table some how such that the chunks getting vacuumed are much smaller and thus not such an impact. On the app side, I suppose we could break the table into multiple tables on some dimension (time) to make the vacuum impacts smaller.
You're running on bigger datasets than I'm used to, but that would be my approach. Did you notice the constraint partitioning introduced in 8.1?
http://www.postgresql.org/docs/8.1/static/ddl-partitioning.html#DDL-PARTITIONING-CONSTRAINT-EXCLUSION -- Richard Huxton Archonet Ltd