diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-08-18 13:01:05 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-08-18 13:01:05 -0400 |
commit | c4b841ba6aa9252ab9dacd59d317aba8cfa9b31a (patch) | |
tree | f04bad7b7d401e1639c2fad616242dced8609c52 /src/backend/commands/explain.c | |
parent | a20aac890a89e6f88e841dedbbfa8d9d5f7309fc (diff) | |
download | postgresql-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.c | 15 |
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); |