diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 4020906..e074213 100644 *** a/src/backend/access/heap/heapam.c --- b/src/backend/access/heap/heapam.c *************** l1: *** 2175,2191 **** { /* Perform additional check for transaction-snapshot mode RI updates */ if (!HeapTupleSatisfiesVisibility(&tp, crosscheck, buffer)) result = HeapTupleUpdated; } if (result != HeapTupleMayBeUpdated) { Assert(result == HeapTupleSelfUpdated || result == HeapTupleUpdated || result == HeapTupleBeingUpdated); - Assert(!(tp.t_data->t_infomask & HEAP_XMAX_INVALID)); *ctid = tp.t_data->t_ctid; - *update_xmax = HeapTupleHeaderGetXmax(tp.t_data); UnlockReleaseBuffer(buffer); if (have_tuple_lock) UnlockTuple(relation, &(tp.t_self), ExclusiveLock); --- 2175,2198 ---- { /* Perform additional check for transaction-snapshot mode RI updates */ if (!HeapTupleSatisfiesVisibility(&tp, crosscheck, buffer)) + { result = HeapTupleUpdated; + *update_xmax = InvalidTransactionId; + } } + else if (result != HeapTupleMayBeUpdated) + { + Assert(!(tp.t_data->t_infomask & HEAP_XMAX_INVALID)); + *update_xmax = HeapTupleHeaderGetXmax(tp.t_data); + } + if (result != HeapTupleMayBeUpdated) { Assert(result == HeapTupleSelfUpdated || result == HeapTupleUpdated || result == HeapTupleBeingUpdated); *ctid = tp.t_data->t_ctid; UnlockReleaseBuffer(buffer); if (have_tuple_lock) UnlockTuple(relation, &(tp.t_self), ExclusiveLock); *************** l2: *** 2527,2533 **** --- 2534,2548 ---- { /* Perform additional check for transaction-snapshot mode RI updates */ if (!HeapTupleSatisfiesVisibility(&oldtup, crosscheck, buffer)) + { result = HeapTupleUpdated; + *update_xmax = InvalidTransactionId; + } + } + else if (result != HeapTupleMayBeUpdated) + { + Assert(!(oldtup.t_data->t_infomask & HEAP_XMAX_INVALID)); + *update_xmax = HeapTupleHeaderGetXmax(oldtup.t_data); } if (result != HeapTupleMayBeUpdated) *************** l2: *** 2535,2543 **** Assert(result == HeapTupleSelfUpdated || result == HeapTupleUpdated || result == HeapTupleBeingUpdated); - Assert(!(oldtup.t_data->t_infomask & HEAP_XMAX_INVALID)); *ctid = oldtup.t_data->t_ctid; - *update_xmax = HeapTupleHeaderGetXmax(oldtup.t_data); UnlockReleaseBuffer(buffer); if (have_tuple_lock) UnlockTuple(relation, &(oldtup.t_self), ExclusiveLock); --- 2550,2556 ----