diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2017-03-03 10:05:56 -0500 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2017-03-03 10:05:56 -0500 |
commit | 713f7c47d9c38654adbc36c47fd9e439f0d1f715 (patch) | |
tree | 637ceb99d2e274e80dad91a1ae694e34a098ac93 /src/backend | |
parent | 1e8a850094478a2036891fa3d4ce769bce411ee3 (diff) | |
download | postgresql-713f7c47d9c38654adbc36c47fd9e439f0d1f715.tar.gz postgresql-713f7c47d9c38654adbc36c47fd9e439f0d1f715.zip |
Fix after trigger execution in logical replication
From: Petr Jelinek <petr.jelinek@2ndquadrant.com>
Tested-by: Thom Brown <thom@linux.com>
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/replication/logical/worker.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index f73bdcd673f..718aafb78a7 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -173,6 +173,9 @@ create_estate_for_relation(LogicalRepRelMapEntry *rel) if (resultRelInfo->ri_TrigDesc) estate->es_trig_tuple_slot = ExecInitExtraTupleSlot(estate); + /* Prepare to catch AFTER triggers. */ + AfterTriggerBeginQuery(); + return estate; } @@ -533,6 +536,10 @@ apply_handle_insert(StringInfo s) /* Cleanup. */ ExecCloseIndices(estate->es_result_relation_info); PopActiveSnapshot(); + + /* Handle queued AFTER triggers. */ + AfterTriggerEndQuery(estate); + ExecResetTupleTable(estate->es_tupleTable, false); FreeExecutorState(estate); @@ -673,6 +680,10 @@ apply_handle_update(StringInfo s) /* Cleanup. */ ExecCloseIndices(estate->es_result_relation_info); PopActiveSnapshot(); + + /* Handle queued AFTER triggers. */ + AfterTriggerEndQuery(estate); + EvalPlanQualEnd(&epqstate); ExecResetTupleTable(estate->es_tupleTable, false); FreeExecutorState(estate); @@ -760,6 +771,10 @@ apply_handle_delete(StringInfo s) /* Cleanup. */ ExecCloseIndices(estate->es_result_relation_info); PopActiveSnapshot(); + + /* Handle queued AFTER triggers. */ + AfterTriggerEndQuery(estate); + EvalPlanQualEnd(&epqstate); ExecResetTupleTable(estate->es_tupleTable, false); FreeExecutorState(estate); |