diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 652cd97..a44ef5f 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -910,6 +910,9 @@ ExecUpdate(ItemPointer tupleid, resultRelInfo = estate->es_result_relation_info; resultRelationDesc = resultRelInfo->ri_RelationDesc; + if (resultRelInfo->ri_TrigDesc && resultRelInfo->ri_FdwRoutine) + oldtuple = ExecMaterializeSlot(planSlot); + /* BEFORE ROW UPDATE Triggers */ if (resultRelInfo->ri_TrigDesc && resultRelInfo->ri_TrigDesc->trig_update_before_row) @@ -1413,7 +1416,6 @@ ExecModifyTable(ModifyTableState *node) JunkFilter *junkfilter; TupleTableSlot *slot; TupleTableSlot *planSlot; - ItemPointer tupleid = NULL; ItemPointerData tuple_ctid; HeapTupleData oldtupdata; HeapTuple oldtuple; @@ -1470,6 +1472,8 @@ ExecModifyTable(ModifyTableState *node) */ for (;;) { + ItemPointer tupleid = NULL; + /* * Reset the per-output-tuple exprcontext. This is needed because * triggers expect to use that context as workspace. It's a bit ugly