diff --git a/contrib/auto_explain/auto_explain.c b/contrib/auto_explain/auto_explain.c index 7526396084c7acb674014c8d7d7a342822cd268a..af9975da1251e3769afd4f53f182213e484050e4 100644 --- a/contrib/auto_explain/auto_explain.c +++ b/contrib/auto_explain/auto_explain.c @@ -6,7 +6,7 @@ * Copyright (c) 2008-2009, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/contrib/auto_explain/auto_explain.c,v 1.2 2009/01/01 17:23:31 momjian Exp $ + * $PostgreSQL: pgsql/contrib/auto_explain/auto_explain.c,v 1.3 2009/01/02 01:16:02 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -18,13 +18,11 @@ PG_MODULE_MAGIC; -#define GUCNAME(name) ("explain." name) - /* GUC variables */ -static int explain_log_min_duration = -1; /* msec or -1 */ -static bool explain_log_analyze = false; -static bool explain_log_verbose = false; -static bool explain_log_nested = false; +static int auto_explain_log_min_duration = -1; /* msec or -1 */ +static bool auto_explain_log_analyze = false; +static bool auto_explain_log_verbose = false; +static bool auto_explain_log_nested_statements = false; /* Current nesting depth of ExecutorRun calls */ static int nesting_level = 0; @@ -35,8 +33,8 @@ static ExecutorRun_hook_type prev_ExecutorRun = NULL; static ExecutorEnd_hook_type prev_ExecutorEnd = NULL; #define auto_explain_enabled() \ - (explain_log_min_duration >= 0 && \ - (nesting_level == 0 || explain_log_nested)) + (auto_explain_log_min_duration >= 0 && \ + (nesting_level == 0 || auto_explain_log_nested_statements)) void _PG_init(void); void _PG_fini(void); @@ -55,10 +53,10 @@ void _PG_init(void) { /* Define custom GUC variables. */ - DefineCustomIntVariable(GUCNAME("log_min_duration"), + DefineCustomIntVariable("auto_explain.log_min_duration", "Sets the minimum execution time above which plans will be logged.", "Zero prints all plans. -1 turns this feature off.", - &explain_log_min_duration, + &auto_explain_log_min_duration, -1, -1, INT_MAX / 1000, PGC_SUSET, @@ -66,30 +64,30 @@ _PG_init(void) NULL, NULL); - DefineCustomBoolVariable(GUCNAME("log_analyze"), + DefineCustomBoolVariable("auto_explain.log_analyze", "Use EXPLAIN ANALYZE for plan logging.", NULL, - &explain_log_analyze, + &auto_explain_log_analyze, false, PGC_SUSET, 0, NULL, NULL); - DefineCustomBoolVariable(GUCNAME("log_verbose"), + DefineCustomBoolVariable("auto_explain.log_verbose", "Use EXPLAIN VERBOSE for plan logging.", NULL, - &explain_log_verbose, + &auto_explain_log_verbose, false, PGC_SUSET, 0, NULL, NULL); - DefineCustomBoolVariable(GUCNAME("log_nested_statements"), + DefineCustomBoolVariable("auto_explain.log_nested_statements", "Log nested statements.", NULL, - &explain_log_nested, + &auto_explain_log_nested_statements, false, PGC_SUSET, 0, @@ -126,7 +124,7 @@ explain_ExecutorStart(QueryDesc *queryDesc, int eflags) if (auto_explain_enabled()) { /* Enable per-node instrumentation iff log_analyze is required. */ - if (explain_log_analyze && (eflags & EXEC_FLAG_EXPLAIN_ONLY) == 0) + if (auto_explain_log_analyze && (eflags & EXEC_FLAG_EXPLAIN_ONLY) == 0) queryDesc->doInstrument = true; } @@ -194,14 +192,14 @@ explain_ExecutorEnd(QueryDesc *queryDesc) /* Log plan if duration is exceeded. */ msec = queryDesc->totaltime->total * 1000.0; - if (msec >= explain_log_min_duration) + if (msec >= auto_explain_log_min_duration) { StringInfoData buf; initStringInfo(&buf); ExplainPrintPlan(&buf, queryDesc, - queryDesc->doInstrument && explain_log_analyze, - explain_log_verbose); + queryDesc->doInstrument && auto_explain_log_analyze, + auto_explain_log_verbose); /* Remove last line break */ if (buf.len > 0 && buf.data[buf.len - 1] == '\n') diff --git a/doc/src/sgml/auto-explain.sgml b/doc/src/sgml/auto-explain.sgml index 1a6dce0e427e93259fb35a09e91c21360bffe9df..c1e85af10e0f275152ad627e7d806704b8ad4298 100644 --- a/doc/src/sgml/auto-explain.sgml +++ b/doc/src/sgml/auto-explain.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/auto-explain.sgml,v 1.2 2008/12/07 23:46:39 alvherre Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/auto-explain.sgml,v 1.3 2009/01/02 01:16:02 tgl Exp $ --> <sect1 id="auto-explain"> <title>auto_explain</title> @@ -38,20 +38,20 @@ LOAD 'auto_explain'; There are several configuration parameters that control the behavior of <filename>auto_explain</filename>. Note that the default behavior is to do nothing, so you must set at least - <varname>explain.log_min_duration</varname> if you want any results. + <varname>auto_explain.log_min_duration</varname> if you want any results. </para> <variablelist> <varlistentry> <term> - <varname>explain.log_min_duration</varname> (<type>integer</type>) + <varname>auto_explain.log_min_duration</varname> (<type>integer</type>) </term> <indexterm> - <primary><varname>explain.log_min_duration</> configuration parameter</primary> + <primary><varname>auto_explain.log_min_duration</> configuration parameter</primary> </indexterm> <listitem> <para> - <varname>explain.log_min_duration</varname> is the minimum statement + <varname>auto_explain.log_min_duration</varname> is the minimum statement execution time, in milliseconds, that will cause the statement's plan to be logged. Setting this to zero logs all plans. Minus-one (the default) disables logging of plans. For example, if you set it to @@ -63,14 +63,14 @@ LOAD 'auto_explain'; <varlistentry> <term> - <varname>explain.log_analyze</varname> (<type>boolean</type>) + <varname>auto_explain.log_analyze</varname> (<type>boolean</type>) </term> <indexterm> - <primary><varname>explain.log_analyze</> configuration parameter</primary> + <primary><varname>auto_explain.log_analyze</> configuration parameter</primary> </indexterm> <listitem> <para> - <varname>explain.log_analyze</varname> causes <command>EXPLAIN ANALYZE</> + <varname>auto_explain.log_analyze</varname> causes <command>EXPLAIN ANALYZE</> output, rather than just <command>EXPLAIN</> output, to be printed when an execution plan is logged. This parameter is off by default. Only superusers can change this setting. @@ -87,14 +87,14 @@ LOAD 'auto_explain'; <varlistentry> <term> - <varname>explain.log_verbose</varname> (<type>boolean</type>) + <varname>auto_explain.log_verbose</varname> (<type>boolean</type>) </term> <indexterm> - <primary><varname>explain.log_verbose</> configuration parameter</primary> + <primary><varname>auto_explain.log_verbose</> configuration parameter</primary> </indexterm> <listitem> <para> - <varname>explain.log_verbose</varname> causes <command>EXPLAIN VERBOSE</> + <varname>auto_explain.log_verbose</varname> causes <command>EXPLAIN VERBOSE</> output, rather than just <command>EXPLAIN</> output, to be printed when an execution plan is logged. This parameter is off by default. Only superusers can change this setting. @@ -104,14 +104,14 @@ LOAD 'auto_explain'; <varlistentry> <term> - <varname>explain.log_nested_statements</varname> (<type>boolean</type>) + <varname>auto_explain.log_nested_statements</varname> (<type>boolean</type>) </term> <indexterm> - <primary><varname>explain.log_nested_statements</> configuration parameter</primary> + <primary><varname>auto_explain.log_nested_statements</> configuration parameter</primary> </indexterm> <listitem> <para> - <varname>explain.log_nested_statements</varname> causes nested + <varname>auto_explain.log_nested_statements</varname> causes nested statements (statements executed inside a function) to be considered for logging. When it is off, only top-level query plans are logged. This parameter is off by default. Only superusers can change this setting. @@ -122,16 +122,16 @@ LOAD 'auto_explain'; <para> In order to set these parameters in your <filename>postgresql.conf</> file, - you will need to add <literal>explain</> in - <varname>custom_variable_classes</>. Typical usage might be: + you will need to add <literal>auto_explain</> to + <xref linkend="guc-custom-variable-classes">. Typical usage might be: </para> <programlisting> # postgresql.conf shared_preload_libraries = 'auto_explain' -custom_variable_classes = 'explain' -explain.log_min_duration = '3s' +custom_variable_classes = 'auto_explain' +auto_explain.log_min_duration = '3s' </programlisting> </sect2> @@ -140,7 +140,7 @@ explain.log_min_duration = '3s' <programlisting> postgres=# LOAD 'auto_explain'; - postgres=# SET explain.log_min_duration = 0; + postgres=# SET auto_explain.log_min_duration = 0; postgres=# SELECT count(*) FROM pg_class, pg_index WHERE oid = indrelid AND indisunique; diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 57ccfe256e6fb6f7ee78e40360b354b7e38fa854..62649b8ef42da7ccfcab623cf167b5325149632d 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * Written by Peter Eisentraut <peter_e@gmx.net>. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.484 2009/01/01 17:23:53 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.485 2009/01/02 01:16:02 tgl Exp $ * *-------------------------------------------------------------------- */ @@ -7283,11 +7283,11 @@ assign_custom_variable_classes(const char *newval, bool doit, GucSource source) continue; } - if (hasSpaceAfterToken || !isalnum((unsigned char) c)) + if (hasSpaceAfterToken || !(isalnum((unsigned char) c) || c == '_')) { /* - * Syntax error due to token following space after token or non - * alpha numeric character + * Syntax error due to token following space after token or + * non-identifier character */ pfree(buf.data); return NULL;