mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-08 14:17:32 +08:00
Fix reporting of violations in ExecConstraints, again.
We decided in f1b4c771ea74f42447dccaed42ffcdcccf3aa694 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:
@ -263,8 +263,7 @@ ExecInsert(ModifyTableState *mtstate,
|
||||
Relation resultRelationDesc;
|
||||
Oid newId;
|
||||
List *recheckIndexes = NIL;
|
||||
TupleTableSlot *oldslot = slot,
|
||||
*result = NULL;
|
||||
TupleTableSlot *result = NULL;
|
||||
|
||||
/*
|
||||
* get the heap tuple out of the tuple table slot, making sure we have a
|
||||
@ -435,7 +434,7 @@ ExecInsert(ModifyTableState *mtstate,
|
||||
* Check the constraints of the tuple
|
||||
*/
|
||||
if (resultRelationDesc->rd_att->constr || resultRelInfo->ri_PartitionCheck)
|
||||
ExecConstraints(resultRelInfo, slot, oldslot, estate);
|
||||
ExecConstraints(resultRelInfo, slot, estate);
|
||||
|
||||
if (onconflict != ONCONFLICT_NONE && resultRelInfo->ri_NumIndices > 0)
|
||||
{
|
||||
@ -993,7 +992,7 @@ lreplace:;
|
||||
* tuple-routing is performed here, hence the slot remains unchanged.
|
||||
*/
|
||||
if (resultRelationDesc->rd_att->constr || resultRelInfo->ri_PartitionCheck)
|
||||
ExecConstraints(resultRelInfo, slot, slot, estate);
|
||||
ExecConstraints(resultRelInfo, slot, estate);
|
||||
|
||||
/*
|
||||
* replace the heap tuple
|
||||
|
||||
Reference in New Issue
Block a user