On Mon, 2005-03-10 at 12:28 -0400, Qingqing Zhou wrote:
> Ooops, this wording change is inconsistent with Log_connections, so I
> reverted it. Updated patch is attached.

Other inconsistencies:

- the patch prints a trailing comma when remote->port is the empty
string

- the patch separates the elements of the ereport() line with commas,
whereas the original behavior was to use a single space as a separator

- the original behavior was to prefix the session time with "session
time:"; the patch changed this to "session time="

The latter two changes aren't necessarily incorrect, but I reverted them
anyway, for the sake of consistency with log_connections.

A revised patch is attached -- I've applied it to HEAD.

-Neil

Index: src/backend/tcop/postgres.c
===================================================================
RCS file: /home/neilc/postgres/cvs_root/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.463
diff -c -r1.463 postgres.c
*** src/backend/tcop/postgres.c	26 Sep 2005 15:51:12 -0000	1.463
--- src/backend/tcop/postgres.c	5 Oct 2005 23:42:23 -0000
***************
*** 3526,3554 ****
  static void
  log_disconnections(int code, Datum arg)
  {
! 	Port	   *port = MyProcPort;
! 	struct timeval end;
! 	int			hours,
! 				minutes,
! 				seconds;
  
- 	char		session_time[20];
- 	char		uname[6 + NAMEDATALEN];
- 	char		dbname[10 + NAMEDATALEN];
- 	char		remote_host[7 + NI_MAXHOST];
- 	char		remote_port[7 + NI_MAXSERV];
- 
- 	snprintf(uname, sizeof(uname), " user=%s", port->user_name);
- 	snprintf(dbname, sizeof(dbname), " database=%s", port->database_name);
- 	snprintf(remote_host, sizeof(remote_host), " host=%s",
- 			 port->remote_host);
- 	if (port->remote_port[0])
- 		snprintf(remote_port, sizeof(remote_port), " port=%s", port->remote_port);
- 	else
- 		remote_port[0] = '\0';
- 		
  	gettimeofday(&end, NULL);
- 
  	if (end.tv_usec < port->session_start.tv_usec)
  	{
  		end.tv_sec--;
--- 3526,3538 ----
  static void
  log_disconnections(int code, Datum arg)
  {
! 	Port	*port = MyProcPort;
! 	struct	timeval end;
! 	int		hours,
! 			minutes,
! 			seconds;
  
  	gettimeofday(&end, NULL);
  	if (end.tv_usec < port->session_start.tv_usec)
  	{
  		end.tv_sec--;
***************
*** 3557,3584 ****
  	end.tv_sec -= port->session_start.tv_sec;
  	end.tv_usec -= port->session_start.tv_usec;
  
  	hours = end.tv_sec / SECS_PER_HOUR;
  	end.tv_sec %= SECS_PER_HOUR;
  	minutes = end.tv_sec / SECS_PER_MINUTE;
  	seconds = end.tv_sec % SECS_PER_MINUTE;
  
! 	/* if time has gone backwards for some reason say so, or print time */
! 
! 	if (end.tv_sec < 0)
! 		snprintf(session_time, sizeof(session_time), "negative!");
! 	else
! 
! 		/*
! 		 * for stricter accuracy here we could round - this is close
! 		 * enough
! 		 */
! 		snprintf(session_time, sizeof(session_time),
! 				 "%d:%02d:%02d.%02d",
! 				 hours, minutes, seconds, (int) (end.tv_usec / 10000));
! 
! 	ereport(
! 			LOG,
! 			(errmsg("disconnection: session time: %s%s%s%s%s",
! 				session_time, uname, dbname, remote_host, remote_port)));
! 
  }
--- 3541,3556 ----
  	end.tv_sec -= port->session_start.tv_sec;
  	end.tv_usec -= port->session_start.tv_usec;
  
+ 	/* for stricter accuracy here we could round - this is close enough */
  	hours = end.tv_sec / SECS_PER_HOUR;
  	end.tv_sec %= SECS_PER_HOUR;
  	minutes = end.tv_sec / SECS_PER_MINUTE;
  	seconds = end.tv_sec % SECS_PER_MINUTE;
  
! 	ereport(LOG,
! 			(errmsg("disconnection: session time: %d:%02d:%02d.%02d "
! 					"user=%s database=%s host=%s%s%s",
! 					hours, minutes, seconds, (int) (end.tv_usec / 10000),
! 					port->user_name, port->database_name, port->remote_host,
! 					port->remote_port[0] ? " port=" : "", port->remote_port)));
  }
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to