*** a/contrib/postgres_fdw/expected/postgres_fdw.out --- b/contrib/postgres_fdw/expected/postgres_fdw.out *************** *** 6459,6464 **** DROP TRIGGER trig_row_after ON rem1; --- 6459,6479 ---- DROP TRIGGER trig_stmt_before ON rem1; DROP TRIGGER trig_stmt_after ON rem1; DELETE from rem1; + CREATE TRIGGER trig_row_after1 + AFTER INSERT OR UPDATE OR DELETE ON rem1 + FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); + CREATE TRIGGER trig_row_after2 + AFTER INSERT OR UPDATE OR DELETE ON rem1 + FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); + insert into rem1 values(1,'insert'); + NOTICE: trig_row_after1(23, skidoo) AFTER ROW INSERT ON rem1 + NOTICE: NEW: (1,insert) + NOTICE: trig_row_after2(23, skidoo) AFTER ROW INSERT ON rem1 + NOTICE: NEW: (1,insert) + -- cleanup + DROP TRIGGER trig_row_after1 ON rem1; + DROP TRIGGER trig_row_after2 ON rem1; + DELETE from rem1; -- Test WHEN conditions CREATE TRIGGER trig_row_before_insupd BEFORE INSERT OR UPDATE ON rem1 *************** *** 6689,6695 **** NOTICE: trig_row_after(23, skidoo) AFTER ROW INSERT ON rem1 NOTICE: NEW: (13,"test triggered !") ctid -------- ! (0,29) (1 row) -- cleanup --- 6704,6710 ---- NOTICE: NEW: (13,"test triggered !") ctid -------- ! (0,30) (1 row) -- cleanup *** a/contrib/postgres_fdw/sql/postgres_fdw.sql --- b/contrib/postgres_fdw/sql/postgres_fdw.sql *************** *** 1485,1490 **** DROP TRIGGER trig_stmt_after ON rem1; --- 1485,1505 ---- DELETE from rem1; + CREATE TRIGGER trig_row_after1 + AFTER INSERT OR UPDATE OR DELETE ON rem1 + FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); + + CREATE TRIGGER trig_row_after2 + AFTER INSERT OR UPDATE OR DELETE ON rem1 + FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo'); + + insert into rem1 values(1,'insert'); + + -- cleanup + DROP TRIGGER trig_row_after1 ON rem1; + DROP TRIGGER trig_row_after2 ON rem1; + + DELETE from rem1; -- Test WHEN conditions *** a/src/backend/commands/trigger.c --- b/src/backend/commands/trigger.c *************** *** 4355,4364 **** AfterTriggerExecute(EState *estate, if (should_free_new) heap_freetuple(LocTriggerData.tg_newtuple); ! if (LocTriggerData.tg_trigslot) ! ExecClearTuple(LocTriggerData.tg_trigslot); ! if (LocTriggerData.tg_newslot) ! ExecClearTuple(LocTriggerData.tg_newslot); /* * If doing EXPLAIN ANALYZE, stop charging time to this trigger, and count --- 4355,4368 ---- if (should_free_new) heap_freetuple(LocTriggerData.tg_newtuple); ! /* don't clear slots' contents if foreign table */ ! if (trig_tuple_slot1 == NULL) ! { ! if (LocTriggerData.tg_trigslot) ! ExecClearTuple(LocTriggerData.tg_trigslot); ! if (LocTriggerData.tg_newslot) ! ExecClearTuple(LocTriggerData.tg_newslot); ! } /* * If doing EXPLAIN ANALYZE, stop charging time to this trigger, and count