On 2018-05-24 16:46:24 -0400, Alvaro Herrera wrote: > On 2018-May-24, Andres Freund wrote: > > > On 2018-05-24 13:08:53 -0400, Alvaro Herrera wrote: > > > Hmm .. surely > > > > xid = HeapTupleHeaderGetXmin(tuple); > > > xmin_frozen = ((xid == FrozenTransactionId) || > > > HeapTupleHeaderXminFrozen(tuple)); > > > - if (TransactionIdIsNormal(xid)) > > > + if (!xmin_frozen && TransactionIdIsNormal(xid)) > > > I don't think that's necesary - HeapTupleHeaderGetXmin() returns > > FrozenTransactionId if the tuple is frozen (note the > > HeapTupleHeaderXminFrozen() within). > > Ah, yeah ... I probably thought about this when writing it and removed > it for that reason. > > BTW I think the definition of HeapTupleHeaderXminFrozen is seriously > confusing, by failing to return true if the xmin is numerically > FrozenXid (which it'll be if the database was pg_upgraded). I wonder > about this one in HeapTupleSatisfiesMVCC: I suggest raising this on -hackers. I agree that it's unfortunate. Greetings, Andres Freund