This patch fixes one serious bug (runaway INSERT) and a few rare (and
hard to reproduce) error conditions. Manfred Koizar
This commit is contained in:
parent
bf7d8e4299
commit
ceb438ed8c
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.142 2002/07/20 05:16:56 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.143 2002/07/30 16:08:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* INTERFACE ROUTINES
|
* INTERFACE ROUTINES
|
||||||
@ -1123,11 +1123,14 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid)
|
|||||||
CheckMaxObjectId(HeapTupleGetOid(tup));
|
CheckMaxObjectId(HeapTupleGetOid(tup));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tup->t_data->t_infomask &= ~(HEAP_XACT_MASK);
|
||||||
HeapTupleHeaderSetXmin(tup->t_data, GetCurrentTransactionId());
|
HeapTupleHeaderSetXmin(tup->t_data, GetCurrentTransactionId());
|
||||||
HeapTupleHeaderSetCmin(tup->t_data, cid);
|
HeapTupleHeaderSetCmin(tup->t_data, cid);
|
||||||
HeapTupleHeaderSetXmaxInvalid(tup->t_data);
|
HeapTupleHeaderSetXmaxInvalid(tup->t_data);
|
||||||
HeapTupleHeaderSetCmax(tup->t_data, FirstCommandId);
|
/*
|
||||||
tup->t_data->t_infomask &= ~(HEAP_XACT_MASK);
|
* Do *not* set Cmax! This would overwrite Cmin.
|
||||||
|
*/
|
||||||
|
/* HeapTupleHeaderSetCmax(tup->t_data, FirstCommandId); */
|
||||||
tup->t_data->t_infomask |= HEAP_XMAX_INVALID;
|
tup->t_data->t_infomask |= HEAP_XMAX_INVALID;
|
||||||
tup->t_tableOid = relation->rd_id;
|
tup->t_tableOid = relation->rd_id;
|
||||||
|
|
||||||
@ -2147,7 +2150,11 @@ heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
|
|||||||
|
|
||||||
if (redo)
|
if (redo)
|
||||||
{
|
{
|
||||||
htup->t_infomask &= ~(HEAP_XMAX_COMMITTED |
|
/*
|
||||||
|
* On redo from WAL we cannot rely on a tqual-routine
|
||||||
|
* to have reset HEAP_MOVED.
|
||||||
|
*/
|
||||||
|
htup->t_infomask &= ~(HEAP_MOVED | HEAP_XMAX_COMMITTED |
|
||||||
HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE);
|
HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE);
|
||||||
HeapTupleHeaderSetXmax(htup, record->xl_xid);
|
HeapTupleHeaderSetXmax(htup, record->xl_xid);
|
||||||
HeapTupleHeaderSetCmax(htup, FirstCommandId);
|
HeapTupleHeaderSetCmax(htup, FirstCommandId);
|
||||||
@ -2320,7 +2327,11 @@ heap_xlog_update(bool redo, XLogRecPtr lsn, XLogRecord *record, bool move)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
htup->t_infomask &= ~(HEAP_XMAX_COMMITTED |
|
/*
|
||||||
|
* On redo from WAL we cannot rely on a tqual-routine
|
||||||
|
* to have reset HEAP_MOVED.
|
||||||
|
*/
|
||||||
|
htup->t_infomask &= ~(HEAP_MOVED | HEAP_XMAX_COMMITTED |
|
||||||
HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE);
|
HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE);
|
||||||
HeapTupleHeaderSetXmax(htup, record->xl_xid);
|
HeapTupleHeaderSetXmax(htup, record->xl_xid);
|
||||||
HeapTupleHeaderSetCmax(htup, FirstCommandId);
|
HeapTupleHeaderSetCmax(htup, FirstCommandId);
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.57 2002/07/20 04:57:13 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.58 2002/07/30 16:08:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -83,6 +83,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
|
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
|
||||||
|
tuple->t_infomask &= ~HEAP_MOVED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (tuple->t_infomask & HEAP_MOVED_IN)
|
else if (tuple->t_infomask & HEAP_MOVED_IN)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user