1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-21 16:02:15 +03:00

Reduce scope of changes for COPY FREEZE.

Allow support only for freezing tuples by explicit
command. Previous coding mistakenly extended
slightly beyond what was agreed as correct on -hackers.
So essentially a partial revoke of earlier work,
leaving just the COPY FREEZE command.
This commit is contained in:
Simon Riggs
2012-12-02 20:52:52 +00:00
parent 3114cb60a1
commit 5457a130d3
5 changed files with 57 additions and 47 deletions

View File

@ -1875,13 +1875,11 @@ FreeBulkInsertState(BulkInsertState bistate)
* The HEAP_INSERT_SKIP_FSM option is passed directly to
* RelationGetBufferForTuple, which see for more info.
*
* HEAP_INSERT_COMMITTED should only be specified for inserts into
* HEAP_INSERT_FROZEN should only be specified for inserts into
* relfilenodes created during the current subtransaction and when
* there are no prior snapshots or pre-existing portals open.
*
* HEAP_INSERT_FROZEN only has meaning when HEAP_INSERT_COMMITTED is
* also set. This causes rows to be frozen, which is an MVCC violation
* and requires explicit options chosen by user.
* This causes rows to be frozen, which is an MVCC violation and
* requires explicit options chosen by user.
*
* Note that these options will be applied when inserting into the heap's
* TOAST table, too, if the tuple requires any out-of-line data.
@ -2086,11 +2084,10 @@ heap_prepare_insert(Relation relation, HeapTuple tup, TransactionId xid,
tup->t_data->t_infomask &= ~(HEAP_XACT_MASK);
tup->t_data->t_infomask2 &= ~(HEAP2_XACT_MASK);
tup->t_data->t_infomask |= HEAP_XMAX_INVALID;
if (options & HEAP_INSERT_COMMITTED)
if (options & HEAP_INSERT_FROZEN)
{
tup->t_data->t_infomask |= HEAP_XMIN_COMMITTED;
if (options & HEAP_INSERT_FROZEN)
HeapTupleHeaderSetXmin(tup->t_data, FrozenTransactionId);
HeapTupleHeaderSetXmin(tup->t_data, FrozenTransactionId);
}
else
HeapTupleHeaderSetXmin(tup->t_data, xid);