@ -2938,6 +2938,7 @@ relation_needs_vacanalyze(Oid relid,
int freeze_max_age ;
int freeze_max_age ;
int multixact_freeze_max_age ;
int multixact_freeze_max_age ;
TransactionId xidForceLimit ;
TransactionId xidForceLimit ;
TransactionId relfrozenxid ;
MultiXactId multiForceLimit ;
MultiXactId multiForceLimit ;
Assert ( classForm ! = NULL ) ;
Assert ( classForm ! = NULL ) ;
@ -2989,16 +2990,18 @@ relation_needs_vacanalyze(Oid relid,
xidForceLimit = recentXid - freeze_max_age ;
xidForceLimit = recentXid - freeze_max_age ;
if ( xidForceLimit < FirstNormalTransactionId )
if ( xidForceLimit < FirstNormalTransactionId )
xidForceLimit - = FirstNormalTransactionId ;
xidForceLimit - = FirstNormalTransactionId ;
force_vacuum = ( TransactionIdIsNormal ( classForm - > relfrozenxid ) & &
relfrozenxid = classForm - > relfrozenxid ;
TransactionIdPrecedes ( classForm - > relfrozenxid ,
force_vacuum = ( TransactionIdIsNormal ( relfrozenxid ) & &
xidForceLimit ) ) ;
TransactionIdPrecedes ( relfrozenxid , xidForceLimit ) ) ;
if ( ! force_vacuum )
if ( ! force_vacuum )
{
{
MultiXactId relminmxid = classForm - > relminmxid ;
multiForceLimit = recentMulti - multixact_freeze_max_age ;
multiForceLimit = recentMulti - multixact_freeze_max_age ;
if ( multiForceLimit < FirstMultiXactId )
if ( multiForceLimit < FirstMultiXactId )
multiForceLimit - = FirstMultiXactId ;
multiForceLimit - = FirstMultiXactId ;
force_vacuum = MultiXactIdIsValid ( classForm - > relminmxid ) & &
force_vacuum = MultiXactIdIsValid ( relminmxid ) & &
MultiXactIdPrecedes ( classForm - > relminmxid , multiForceLimit ) ;
MultiXactIdPrecedes ( relminmxid , multiForceLimit ) ;
}
}
* wraparound = force_vacuum ;
* wraparound = force_vacuum ;