In XidInMVCCSnapshot:
> if (snapshot->takenDuringRecovery)
> {
> /*
> * If the snapshot contains full subxact data, the fastest way to check
> * things is just to compare the given XID against both subxact XIDs and
> * top-level XIDs. If the snapshot overflowed, we have to use pg_subtrans
> * to convert a subxact XID to its parent XID, but then we need only look
> * at top-level XIDs not subxacts.
> */
...
> }
> else
> {
> int32 j;
>
> /*
> *
> * In recovery we store all xids in the subxact array because this
> * is by far the bigger array and we mostly don't know which xids
> * are top-level and which are subxacts. The xip array is empty.
> *
> * We start by searching subtrans, if we overflowed.
> */
...
> }
Hang on, isn't this 180 degrees backwards?
-- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com