Have log_duration only output when log_statement has printed the query.
authorBruce Momjian <bruce@momjian.us>
Fri, 15 Oct 2004 16:50:31 +0000 (16:50 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 15 Oct 2004 16:50:31 +0000 (16:50 +0000)
This handles the new multiple log_statement values.

Ed L.

doc/src/sgml/runtime.sgml
src/backend/tcop/postgres.c

index da1d0745470cc08d5789e7afb25f3b66e01b9ddc..f82fbc877def92e787b15238d52547f65d4bb9f0 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.287 2004/10/09 23:12:53 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.288 2004/10/15 16:50:29 momjian Exp $
 -->
 
 <Chapter Id="runtime">
@@ -2355,13 +2355,14 @@ archive_command = 'copy "%p" /mnt/server/archivedir/"%f"'  # Win32
       <term><varname>log_duration</varname> (<type>boolean</type>)</term>
       <listitem>
        <para>
-        Causes the duration of every completed statement to be logged.
-        To use this option, it is recommended that you also enable
-        <varname>log_statement</> and if not using <application>syslog</>
-        log the PID using <varname>log_line_prefix</> so that you
-        can link the statement to the duration using the process
-        ID. The default is off.  Only superusers can turn off this
-        option if it is enabled by the administrator.
+        Causes the duration of every completed statement which satisfies
+        <varname>log_statement</> to be logged.  When using this option, 
+        if you are not using <application>syslog</>, it is recommended 
+        that you log the PID or session ID using <varname>log_line_prefix</> 
+        or log the session ID so that you can link the statement to the 
+        duration using the process ID or session ID. The default is off.  
+        Only superusers can turn off this option if it is enabled by the 
+        administrator.
        </para>
       </listitem>
      </varlistentry>
index 9f4e8b06badf13a3998328ed1967667abac2f7f2..b9abf0d6b6997ca5239c023b2f3bb5653f981282 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.435 2004/10/12 21:54:40 petere Exp $
+ *   $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.436 2004/10/15 16:50:31 momjian Exp $
  *
  * NOTES
  *   this is the "main" module of the postgres backend and
@@ -81,6 +81,9 @@ bool      Log_disconnections = false;
 
 LogStmtLevel log_statement = LOGSTMT_NONE;
 
+/* flag indicating if the statement satisfies log_statement */
+bool       statement_logged;
+
 /* GUC variable for maximum stack depth (measured in kilobytes) */
 int            max_stack_depth = 2048;
 
@@ -463,9 +466,13 @@ pg_parse_query(const char *query_string)
    List       *raw_parsetree_list;
    ListCell   *parsetree_item;
 
+   statement_logged = false;
    if (log_statement == LOGSTMT_ALL)
+   {
        ereport(LOG,
                (errmsg("statement: %s", query_string)));
+       statement_logged = true;
+   }
 
    if (log_parser_stats)
        ResetUsage();
@@ -501,6 +508,7 @@ pg_parse_query(const char *query_string)
            {
                ereport(LOG,
                        (errmsg("statement: %s", query_string)));
+               statement_logged = true;
                break;
            }
            commandTag = CreateCommandTag(parsetree);
@@ -512,6 +520,7 @@ pg_parse_query(const char *query_string)
            {
                ereport(LOG,
                        (errmsg("statement: %s", query_string)));
+               statement_logged = true;
                break;
            }
        }
@@ -1003,7 +1012,8 @@ exec_simple_query(const char *query_string)
        }
        usecs = (long) (stop_t.tv_sec - start_t.tv_sec) * 1000000 + (long) (stop_t.tv_usec - start_t.tv_usec);
 
-       if (save_log_duration)
+       /* Only print duration if we previously printed the statement. */
+       if (statement_logged && save_log_duration)
            ereport(LOG,
                    (errmsg("duration: %ld.%03ld ms",
                        (long) ((stop_t.tv_sec - start_t.tv_sec) * 1000 +