Cause EXPLAIN's VERBOSE option to print the target list (output column list)
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 18 Apr 2008 01:42:17 +0000 (01:42 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 18 Apr 2008 01:42:17 +0000 (01:42 +0000)
of each plan node, instead of its former behavior of dumping the internal
representation of the plan tree.  The latter display is still available for
those who really want it (see debug_print_plan), but uses for it are certainly
few and and far between.  Per discussion.

This patch also removes the explain_pretty_print GUC, which is obsoleted
by the change.

doc/src/sgml/config.sgml
doc/src/sgml/ref/explain.sgml
src/backend/commands/explain.c
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample
src/include/utils/guc.h

index ec2dfb69db46afba3608756943cd1abef4c27a96..85f2ea15cf24c8929bcee325a11a689319cf6460 100644 (file)
@@ -4187,20 +4187,6 @@ SET XML OPTION { DOCUMENT | CONTENT };
 
      <variablelist>
 
-     <varlistentry id="guc-explain-pretty-print" xreflabel="explain_pretty_print">
-      <term><varname>explain_pretty_print</varname> (<type>boolean</type>)</term>
-      <indexterm>
-       <primary><varname>explain_pretty_print</> configuration parameter</primary>
-      </indexterm>
-      <listitem>
-       <para>
-        Determines whether <command>EXPLAIN VERBOSE</> uses the
-        indented or non-indented format for displaying detailed
-        query-tree dumps. The default is <literal>on</>.
-       </para>
-      </listitem>
-     </varlistentry>
-
      <varlistentry id="guc-dynamic-library-path" xreflabel="dynamic_library_path">
       <term><varname>dynamic_library_path</varname> (<type>string</type>)</term>
       <indexterm>
index 55bb688cbb726544d26f8822a3c7ba9b177dc916..4465686646032de59aa8b4c838828febbef9416b 100644 (file)
@@ -106,12 +106,7 @@ ROLLBACK;
     <term><literal>VERBOSE</literal></term>
     <listitem>
      <para>
-      Show the full internal representation of the plan tree, rather
-      than just a summary.  Usually this option is only useful for
-      specialized debugging purposes.  The
-      <literal>VERBOSE</literal> output is either pretty-printed or
-      not, depending on the setting of the <xref
-      linkend="guc-explain-pretty-print"> configuration parameter.
+      Include the output column list for each node in the plan tree.
      </para>
     </listitem>
    </varlistentry>
index dc3e1682e8e4e74e8d6982c97dc984786a6de5de..06143cc3ac0be139e2a2cacd05323cec4e3cc4ad 100644 (file)
@@ -20,7 +20,6 @@
 #include "commands/prepare.h"
 #include "commands/trigger.h"
 #include "executor/instrument.h"
-#include "nodes/print.h"
 #include "optimizer/clauses.h"
 #include "optimizer/planner.h"
 #include "optimizer/var.h"
@@ -44,7 +43,7 @@ explain_get_index_name_hook_type explain_get_index_name_hook = NULL;
 typedef struct ExplainState
 {
        /* options */
-       bool            printNodes;             /* do nodeToString() too */
+       bool            printTList;             /* print plan targetlists */
        bool            printAnalyze;   /* print actual times */
        /* other states */
        PlannedStmt *pstmt;                     /* top of plan */
@@ -271,30 +270,11 @@ ExplainOnePlan(PlannedStmt *plannedstmt, ParamListInfo params,
 
        es = (ExplainState *) palloc0(sizeof(ExplainState));
 
-       es->printNodes = stmt->verbose;
+       es->printTList = stmt->verbose;
        es->printAnalyze = stmt->analyze;
        es->pstmt = queryDesc->plannedstmt;
        es->rtable = queryDesc->plannedstmt->rtable;
 
-       if (es->printNodes)
-       {
-               char       *s;
-               char       *f;
-
-               s = nodeToString(queryDesc->plannedstmt->planTree);
-               if (s)
-               {
-                       if (Explain_pretty_print)
-                               f = pretty_format_node_dump(s);
-                       else
-                               f = format_node_dump(s);
-                       pfree(s);
-                       do_text_output_multiline(tstate, f);
-                       pfree(f);
-                       do_text_output_oneline(tstate, ""); /* separator line */
-               }
-       }
-
        initStringInfo(&buf);
        explain_outNode(&buf,
                                        queryDesc->plannedstmt->planTree, queryDesc->planstate,
@@ -747,7 +727,8 @@ explain_outNode(StringInfo str,
        appendStringInfoChar(str, '\n');
 
        /* target list */
-       show_plan_tlist(plan, str, indent, es);
+       if (es->printTList)
+               show_plan_tlist(plan, str, indent, es);
 
        /* quals, sort keys, etc */
        switch (nodeTag(plan))
@@ -1055,7 +1036,6 @@ static void
 show_plan_tlist(Plan *plan,
                                StringInfo str, int indent, ExplainState *es)
 {
-#ifdef EXPLAIN_PRINT_TLISTS
        List       *context;
        bool            useprefix;
        ListCell   *lc;
@@ -1095,7 +1075,6 @@ show_plan_tlist(Plan *plan,
        }
 
        appendStringInfoChar(str, '\n');
-#endif /* EXPLAIN_PRINT_TLISTS */
 }
 
 /*
index bb32f42875ab78d2b0978eebc7a0ad47243241d9..25277439039bd1fbaeeb972a0d02ec1ee1c26b0b 100644 (file)
@@ -282,7 +282,6 @@ bool                Debug_print_plan = false;
 bool           Debug_print_parse = false;
 bool           Debug_print_rewritten = false;
 bool           Debug_pretty_print = false;
-bool           Explain_pretty_print = true;
 
 bool           log_parser_stats = false;
 bool           log_planner_stats = false;
@@ -807,15 +806,6 @@ static struct config_bool ConfigureNamesBool[] =
        },
 #endif
 
-       {
-               {"explain_pretty_print", PGC_USERSET, CLIENT_CONN_OTHER,
-                       gettext_noop("Uses the indented output format for EXPLAIN VERBOSE."),
-                       NULL
-               },
-               &Explain_pretty_print,
-               true, NULL, NULL
-       },
-
        {
                {"track_activities", PGC_SUSET, STATS_COLLECTOR,
                        gettext_noop("Collects information about executing commands."),
index e5ae0e851885ff6c5f83ee947751fe9ebae08777..9fb567bd62b08d1efa544c005e819001f04d1d84 100644 (file)
 
 # - Other Defaults -
 
-#explain_pretty_print = on
 #dynamic_library_path = '$libdir'
 #local_preload_libraries = ''
 
index cd690b8e81018b16a808125a9a6b648874543eda..b8dc84e28cccdfb05201bac85f7856e30f6398c4 100644 (file)
@@ -127,7 +127,6 @@ extern bool Debug_print_plan;
 extern bool Debug_print_parse;
 extern bool Debug_print_rewritten;
 extern bool Debug_pretty_print;
-extern bool Explain_pretty_print;
 
 extern bool log_parser_stats;
 extern bool log_planner_stats;