mirror of
https://github.com/postgres/postgres.git
synced 2025-06-30 21:42:05 +03:00
Fix reporting of violations in ExecConstraints, again.
We decided in f1b4c771ea
to pass the
original slot to ExecConstraints(), but that breaks when there are
BEFORE ROW triggers involved. So we need to do reverse-map the tuples
back to the original descriptor instead, as Amit originally proposed.
Amit Langote, reviewed by Ashutosh Bapat. One overlooked comment
fixed by me.
Discussion: http://postgr.es/m/b3a17254-6849-e542-2353-bde4e880b6a4@lab.ntt.co.jp
This commit is contained in:
@ -2506,8 +2506,7 @@ CopyFrom(CopyState cstate)
|
||||
|
||||
for (;;)
|
||||
{
|
||||
TupleTableSlot *slot,
|
||||
*oldslot;
|
||||
TupleTableSlot *slot;
|
||||
bool skip_tuple;
|
||||
Oid loaded_oid = InvalidOid;
|
||||
|
||||
@ -2549,7 +2548,6 @@ CopyFrom(CopyState cstate)
|
||||
ExecStoreTuple(tuple, slot, InvalidBuffer, false);
|
||||
|
||||
/* Determine the partition to heap_insert the tuple into */
|
||||
oldslot = slot;
|
||||
if (cstate->partition_dispatch_info)
|
||||
{
|
||||
int leaf_part_index;
|
||||
@ -2651,7 +2649,7 @@ CopyFrom(CopyState cstate)
|
||||
/* Check the constraints of the tuple */
|
||||
if (cstate->rel->rd_att->constr ||
|
||||
resultRelInfo->ri_PartitionCheck)
|
||||
ExecConstraints(resultRelInfo, slot, oldslot, estate);
|
||||
ExecConstraints(resultRelInfo, slot, estate);
|
||||
|
||||
if (useHeapMultiInsert)
|
||||
{
|
||||
|
Reference in New Issue
Block a user