Index: doc/src/sgml/runtime.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v
retrieving revision 1.287
diff -c -c -r1.287 runtime.sgml
*** doc/src/sgml/runtime.sgml	9 Oct 2004 23:12:53 -0000	1.287
--- doc/src/sgml/runtime.sgml	15 Oct 2004 16:47:40 -0000
***************
*** 2355,2367 ****
        <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.
         </para>
        </listitem>
       </varlistentry>
--- 2355,2368 ----
        <term><varname>log_duration</varname> (<type>boolean</type>)</term>
        <listitem>
         <para>
!         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: src/backend/tcop/postgres.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.435
diff -c -c -r1.435 postgres.c
*** src/backend/tcop/postgres.c	12 Oct 2004 21:54:40 -0000	1.435
--- src/backend/tcop/postgres.c	15 Oct 2004 16:47:52 -0000
***************
*** 81,86 ****
--- 81,89 ----
  
  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,471 ****
--- 466,478 ----
  	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,506 ****
--- 508,514 ----
  			{
  				ereport(LOG,
  						(errmsg("statement: %s", query_string)));
+ 				statement_logged = true;
  				break;
  			}
  			commandTag = CreateCommandTag(parsetree);
***************
*** 512,517 ****
--- 520,526 ----
  			{
  				ereport(LOG,
  						(errmsg("statement: %s", query_string)));
+ 				statement_logged = true;
  				break;
  			}
  		}
***************
*** 1003,1009 ****
  		}
  		usecs = (long) (stop_t.tv_sec - start_t.tv_sec) * 1000000 + (long) (stop_t.tv_usec - start_t.tv_usec);
  
! 		if (save_log_duration)
  			ereport(LOG,
  					(errmsg("duration: %ld.%03ld ms",
  						(long) ((stop_t.tv_sec - start_t.tv_sec) * 1000 +
--- 1012,1019 ----
  		}
  		usecs = (long) (stop_t.tv_sec - start_t.tv_sec) * 1000000 + (long) (stop_t.tv_usec - start_t.tv_usec);
  
! 		/* 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 +
