]> granicus.if.org Git - postgresql/commitdiff
HeapTupleHeaderAdjustCmax made the incorrect assumption that the raw
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 1 Sep 2008 18:52:45 +0000 (18:52 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 1 Sep 2008 18:52:45 +0000 (18:52 +0000)
command id is the cmin, when it can in fact be a combo cid. That made rows
incorrectly invisible to a transaction where a tuple was deleted by multiple
aborted subtransactions.

Report and patch Karl Schnaitter. Back-patch to 8.3, where combo cids was
introduced.

src/backend/utils/time/combocid.c

index 815b961e69c0787040ecaab9ad6d335ed2c29613..fb501760789ce3ce4ca3f7a9fb5d7667c1026706 100644 (file)
@@ -34,7 +34,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/time/combocid.c,v 1.4 2008/01/01 19:45:55 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/time/combocid.c,v 1.5 2008/09/01 18:52:45 heikki Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -155,7 +155,7 @@ HeapTupleHeaderAdjustCmax(HeapTupleHeader tup,
        if (!(tup->t_infomask & HEAP_XMIN_COMMITTED) &&
                TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmin(tup)))
        {
-               CommandId       cmin = HeapTupleHeaderGetRawCommandId(tup);
+               CommandId       cmin = HeapTupleHeaderGetCmin(tup);
 
                *cmax = GetComboCommandId(cmin, *cmax);
                *iscombo = true;