Looking over the autovacuum.c code, I see:
/* * Determine the oldest datfrozenxid/relfrozenxid that we will allow to * pass without forcing a vacuum.
(Thislimit can be tightened for * particular tables, but not loosened.) */ recentXid = ReadNewTransactionId();
xidForceLimit = recentXid - autovacuum_freeze_max_age; /* ensure it's a "normal" XID, else TransactionIdPrecedes
misbehaves*/ if (xidForceLimit < FirstNormalTransactionId) xidForceLimit -= FirstNormalTransactionId;
This last line doesn't look right to me; should it be:
xidForceLimit = FirstNormalTransactionId;
-- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB
http://enterprisedb.com
+ It's impossible for everything to be true. +