Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitceb438e

Browse files
committed
This patch fixes one serious bug (runaway INSERT) and a few rare (and
hard to reproduce) error conditions.Manfred Koizar
1 parentbf7d8e4 commitceb438e

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

‎src/backend/access/heap/heapam.c

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.142 2002/07/20 05:16:56 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.143 2002/07/3016:08:33 momjian Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -1123,11 +1123,14 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid)
11231123
CheckMaxObjectId(HeapTupleGetOid(tup));
11241124
}
11251125

1126+
tup->t_data->t_infomask &= ~(HEAP_XACT_MASK);
11261127
HeapTupleHeaderSetXmin(tup->t_data,GetCurrentTransactionId());
11271128
HeapTupleHeaderSetCmin(tup->t_data,cid);
11281129
HeapTupleHeaderSetXmaxInvalid(tup->t_data);
1129-
HeapTupleHeaderSetCmax(tup->t_data,FirstCommandId);
1130-
tup->t_data->t_infomask &= ~(HEAP_XACT_MASK);
1130+
/*
1131+
* Do *not* set Cmax! This would overwrite Cmin.
1132+
*/
1133+
/* HeapTupleHeaderSetCmax(tup->t_data, FirstCommandId); */
11311134
tup->t_data->t_infomask |=HEAP_XMAX_INVALID;
11321135
tup->t_tableOid=relation->rd_id;
11331136

@@ -2147,7 +2150,11 @@ heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
21472150

21482151
if (redo)
21492152
{
2150-
htup->t_infomask &= ~(HEAP_XMAX_COMMITTED |
2153+
/*
2154+
* On redo from WAL we cannot rely on a tqual-routine
2155+
* to have reset HEAP_MOVED.
2156+
*/
2157+
htup->t_infomask &= ~(HEAP_MOVED |HEAP_XMAX_COMMITTED |
21512158
HEAP_XMAX_INVALID |HEAP_MARKED_FOR_UPDATE);
21522159
HeapTupleHeaderSetXmax(htup,record->xl_xid);
21532160
HeapTupleHeaderSetCmax(htup,FirstCommandId);
@@ -2320,7 +2327,11 @@ heap_xlog_update(bool redo, XLogRecPtr lsn, XLogRecord *record, bool move)
23202327
}
23212328
else
23222329
{
2323-
htup->t_infomask &= ~(HEAP_XMAX_COMMITTED |
2330+
/*
2331+
* On redo from WAL we cannot rely on a tqual-routine
2332+
* to have reset HEAP_MOVED.
2333+
*/
2334+
htup->t_infomask &= ~(HEAP_MOVED |HEAP_XMAX_COMMITTED |
23242335
HEAP_XMAX_INVALID |HEAP_MARKED_FOR_UPDATE);
23252336
HeapTupleHeaderSetXmax(htup,record->xl_xid);
23262337
HeapTupleHeaderSetCmax(htup,FirstCommandId);

‎src/backend/utils/time/tqual.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* Portions Copyright (c) 1994, Regents of the University of California
1717
*
1818
* IDENTIFICATION
19-
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.57 2002/07/20 04:57:13 momjian Exp $
19+
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.58 2002/07/30 16:08:33 momjian Exp $
2020
*
2121
*-------------------------------------------------------------------------
2222
*/
@@ -83,6 +83,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
8383
return false;
8484
}
8585
tuple->t_infomask |=HEAP_XMIN_COMMITTED;
86+
tuple->t_infomask &= ~HEAP_MOVED;
8687
}
8788
}
8889
elseif (tuple->t_infomask&HEAP_MOVED_IN)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp