|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * 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/30 16:08:33 momjian Exp $ |
12 | 12 | *
|
13 | 13 | *
|
14 | 14 | * INTERFACE ROUTINES
|
@@ -1123,11 +1123,14 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid)
|
1123 | 1123 | CheckMaxObjectId(HeapTupleGetOid(tup));
|
1124 | 1124 | }
|
1125 | 1125 |
|
| 1126 | + tup->t_data->t_infomask &= ~(HEAP_XACT_MASK); |
1126 | 1127 | HeapTupleHeaderSetXmin(tup->t_data, GetCurrentTransactionId());
|
1127 | 1128 | HeapTupleHeaderSetCmin(tup->t_data, cid);
|
1128 | 1129 | 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); */ |
1131 | 1134 | tup->t_data->t_infomask |= HEAP_XMAX_INVALID;
|
1132 | 1135 | tup->t_tableOid = relation->rd_id;
|
1133 | 1136 |
|
@@ -2147,7 +2150,11 @@ heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
|
2147 | 2150 |
|
2148 | 2151 | if (redo)
|
2149 | 2152 | {
|
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 | |
2151 | 2158 | HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE);
|
2152 | 2159 | HeapTupleHeaderSetXmax(htup, record->xl_xid);
|
2153 | 2160 | HeapTupleHeaderSetCmax(htup, FirstCommandId);
|
@@ -2320,7 +2327,11 @@ heap_xlog_update(bool redo, XLogRecPtr lsn, XLogRecord *record, bool move)
|
2320 | 2327 | }
|
2321 | 2328 | else
|
2322 | 2329 | {
|
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 | |
2324 | 2335 | HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE);
|
2325 | 2336 | HeapTupleHeaderSetXmax(htup, record->xl_xid);
|
2326 | 2337 | HeapTupleHeaderSetCmax(htup, FirstCommandId);
|
|
0 commit comments