aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/explain.c
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2017-08-18 13:01:05 -0400
committerRobert Haas <rhaas@postgresql.org>2017-08-18 13:01:05 -0400
commitc4b841ba6aa9252ab9dacd59d317aba8cfa9b31a (patch)
treef04bad7b7d401e1639c2fad616242dced8609c52 /src/backend/commands/explain.c
parenta20aac890a89e6f88e841dedbbfa8d9d5f7309fc (diff)
downloadpostgresql-c4b841ba6aa9252ab9dacd59d317aba8cfa9b31a.tar.gz
postgresql-c4b841ba6aa9252ab9dacd59d317aba8cfa9b31a.zip
Fix interaction of triggers, partitioning, and EXPLAIN ANALYZE.
Add a new EState member es_leaf_result_relations, so that the trigger code knows about ResultRelInfos created by tuple routing. Also make sure ExplainPrintTriggers knows about partition-related ResultRelInfos. Etsuro Fujita, reviewed by Amit Langote Discussion: http://postgr.es/m/57163e18-8e56-da83-337a-22f2c0008051@lab.ntt.co.jp
Diffstat (limited to 'src/backend/commands/explain.c')
-rw-r--r--src/backend/commands/explain.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index 7648201218e..953e74d73ca 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -656,17 +656,30 @@ ExplainPrintTriggers(ExplainState *es, QueryDesc *queryDesc)
ResultRelInfo *rInfo;
bool show_relname;
int numrels = queryDesc->estate->es_num_result_relations;
+ int numrootrels = queryDesc->estate->es_num_root_result_relations;
+ List *leafrels = queryDesc->estate->es_leaf_result_relations;
List *targrels = queryDesc->estate->es_trig_target_relations;
int nr;
ListCell *l;
ExplainOpenGroup("Triggers", "Triggers", false, es);
- show_relname = (numrels > 1 || targrels != NIL);
+ show_relname = (numrels > 1 || numrootrels > 0 ||
+ leafrels != NIL || targrels != NIL);
rInfo = queryDesc->estate->es_result_relations;
for (nr = 0; nr < numrels; rInfo++, nr++)
report_triggers(rInfo, show_relname, es);
+ rInfo = queryDesc->estate->es_root_result_relations;
+ for (nr = 0; nr < numrootrels; rInfo++, nr++)
+ report_triggers(rInfo, show_relname, es);
+
+ foreach(l, leafrels)
+ {
+ rInfo = (ResultRelInfo *) lfirst(l);
+ report_triggers(rInfo, show_relname, es);
+ }
+
foreach(l, targrels)
{
rInfo = (ResultRelInfo *) lfirst(l);