Alvaro Herrera <alvherre@xxxxxxxxxxxxxxxxx> writes: > Hmm, that would mean an ANALYZE got done on template0, no? ... but > AFAICT process_whole_db() always sets analyze=false. The thing that's bothering me is that I don't see any certainty that template0 is only processed via the process_whole_db() path. In the 8.1 code, the existence of a stats-collector DB entry causes a DB to enter the normal round-robin processing path ... and I'm wondering whether the mere act of autovac connecting due to process_whole_db() doesn't cause such an entry to come into existence. IOW once template0 has been vacuumed once for anti-wraparound, it starts receiving normal vacuums, which will cause their own XIDs to appear in pg_statistic at least, and then you're at risk: if autovacuuming stops for awhile, those XIDs will fall below the pg_clog horizon because template0 is not considered when determining the cutoff. 8.2's approach is saner but I think we need some sort of band-aid in the 8.1 branch... regards, tom lane