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