The attached patch makes a very small but useful change to the behaviour of log_line_prefix, by enabling the start time (%s) and cookie (%c) logging to occur for all backends rather than just for session processes (i.e. backends started for a client connection). We actually need almost all of this patch, with or without the change in behaviour, so we can put the cookie in CSVlogs (which I'm still working on), since the cookie+line number make the natural primary key for the logs. The actual change in behaviour from this patch comes from the removal of 2 "if (MyProcPort)" lines in elog.c. Given that, can I sneak this in or should I wait for 8.4 given we're long past feature freeze?


Most of this has been factored out (and cleaned up) from my previous CSVlog patch, so it's not new. I did that so that what is left when I finish will have a rather smaller footprint, as this part seemed fairly seperable.

cheers

andrew
Index: doc/src/sgml/config.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/config.sgml,v
retrieving revision 1.133
diff -c -r1.133 config.sgml
*** doc/src/sgml/config.sgml	24 Jul 2007 04:54:08 -0000	1.133
--- doc/src/sgml/config.sgml	29 Jul 2007 18:14:12 -0000
***************
*** 2861,2867 ****
              <row>
               <entry><literal>%c</literal></entry>
               <entry>Session ID: see below</entry>
!              <entry>yes</entry>
              </row>
              <row>
               <entry><literal>%l</literal></entry>
--- 2861,2867 ----
              <row>
               <entry><literal>%c</literal></entry>
               <entry>Session ID: see below</entry>
!              <entry>no</entry>
              </row>
              <row>
               <entry><literal>%l</literal></entry>
***************
*** 2871,2877 ****
              <row>
               <entry><literal>%s</literal></entry>
               <entry>Session start time stamp</entry>
!              <entry>yes</entry>
              </row>
              <row>
               <entry><literal>%x</literal></entry>
--- 2871,2877 ----
              <row>
               <entry><literal>%s</literal></entry>
               <entry>Session start time stamp</entry>
!              <entry>no</entry>
              </row>
              <row>
               <entry><literal>%x</literal></entry>
Index: src/backend/postmaster/autovacuum.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/autovacuum.c,v
retrieving revision 1.55
diff -c -r1.55 autovacuum.c
*** src/backend/postmaster/autovacuum.c	1 Jul 2007 18:30:54 -0000	1.55
--- src/backend/postmaster/autovacuum.c	29 Jul 2007 18:14:14 -0000
***************
*** 385,390 ****
--- 385,393 ----
  	/* reset MyProcPid */
  	MyProcPid = getpid();
  
+ 	/* record Start Time for logging */
+ 	MyStartTime = time(NULL);
+ 
  	/* Identify myself via ps */
  	init_ps_display("autovacuum launcher process", "", "", "");
  
***************
*** 1403,1408 ****
--- 1406,1414 ----
  	/* reset MyProcPid */
  	MyProcPid = getpid();
  
+ 	/* record Start Time for logging */
+ 	MyStartTime = time(NULL);
+ 
  	/* Identify myself via ps */
  	init_ps_display("autovacuum worker process", "", "", "");
  
Index: src/backend/postmaster/pgarch.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/pgarch.c,v
retrieving revision 1.29
diff -c -r1.29 pgarch.c
*** src/backend/postmaster/pgarch.c	10 Feb 2007 14:58:54 -0000	1.29
--- src/backend/postmaster/pgarch.c	29 Jul 2007 18:14:15 -0000
***************
*** 223,228 ****
--- 223,230 ----
  
  	MyProcPid = getpid();		/* reset MyProcPid */
  
+ 	MyStartTime = time(NULL);   /* record Start Time for logging */
+ 
  	/*
  	 * If possible, make this process a group leader, so that the postmaster
  	 * can signal any child processes too.
Index: src/backend/postmaster/pgstat.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v
retrieving revision 1.161
diff -c -r1.161 pgstat.c
*** src/backend/postmaster/pgstat.c	8 Jul 2007 22:23:16 -0000	1.161
--- src/backend/postmaster/pgstat.c	29 Jul 2007 18:14:17 -0000
***************
*** 2168,2173 ****
--- 2168,2175 ----
  
  	MyProcPid = getpid();		/* reset MyProcPid */
  
+ 	MyStartTime = time(NULL);  	/* record Start Time for logging */
+ 
  	/*
  	 * If possible, make this process a group leader, so that the postmaster
  	 * can signal any child processes too.  (pgstat probably never has
Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v
retrieving revision 1.535
diff -c -r1.535 postmaster.c
*** src/backend/postmaster/postmaster.c	24 Jul 2007 04:54:09 -0000	1.535
--- src/backend/postmaster/postmaster.c	29 Jul 2007 18:14:19 -0000
***************
*** 386,391 ****
--- 386,393 ----
  
  	MyProcPid = PostmasterPid = getpid();
  
+ 	MyStartTime = time(NULL);
+ 
  	IsPostmasterEnvironment = true;
  
  	/*
***************
*** 1103,1108 ****
--- 1105,1112 ----
  
  	MyProcPid = PostmasterPid = getpid();		/* reset PID vars to child */
  
+ 	MyStartTime = time(NULL);
+ 
  /* GH: If there's no setsid(), we hopefully don't need silent mode.
   * Until there's a better solution.
   */
***************
*** 2661,2666 ****
--- 2665,2672 ----
  
  		MyProcPid = getpid();	/* reset MyProcPid */
  
+ 		MyStartTime = time(NULL);
+ 
  		/* We don't want the postmaster's proc_exit() handlers */
  		on_exit_reset();
  
***************
*** 2803,2809 ****
  
  	/* save process start time */
  	port->SessionStartTime = GetCurrentTimestamp();
! 	port->session_start = timestamptz_to_time_t(port->SessionStartTime);
  
  	/* set these to empty in case they are needed before we set them up */
  	port->remote_host = "";
--- 2809,2815 ----
  
  	/* save process start time */
  	port->SessionStartTime = GetCurrentTimestamp();
! 	MyStartTime = timestamptz_to_time_t(port->SessionStartTime);
  
  	/* set these to empty in case they are needed before we set them up */
  	port->remote_host = "";
***************
*** 3385,3390 ****
--- 3391,3398 ----
  
  	MyProcPid = getpid();		/* reset MyProcPid */
  
+ 	MyStartTime = time(NULL);
+ 
  	/* Lose the postmaster's on-exit routines (really a no-op) */
  	on_exit_reset();
  
Index: src/backend/utils/error/elog.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/error/elog.c,v
retrieving revision 1.190
diff -c -r1.190 elog.c
*** src/backend/utils/error/elog.c	21 Jul 2007 22:12:04 -0000	1.190
--- src/backend/utils/error/elog.c	29 Jul 2007 18:14:20 -0000
***************
*** 1485,1496 ****
  				}
  				break;
  			case 'c':
! 				if (MyProcPort)
! 				{
! 					appendStringInfo(buf, "%lx.%x",
! 									 (long) (MyProcPort->session_start),
! 									 MyProcPid);
! 				}
  				break;
  			case 'p':
  				appendStringInfo(buf, "%d", MyProcPid);
--- 1485,1491 ----
  				}
  				break;
  			case 'c':
! 				appendStringInfo(buf, "%lx.%x", (long)(MyStartTime),MyProcPid);
  				break;
  			case 'p':
  				appendStringInfo(buf, "%d", MyProcPid);
***************
*** 1552,1558 ****
  				}
  				break;
  			case 's':
- 				if (MyProcPort)
  				{
  					char		strfbuf[128];
  
--- 1547,1552 ----
***************
*** 1563,1569 ****
  #else
  							 "%Y-%m-%d %H:%M:%S",
  #endif
! 							 localtime(&MyProcPort->session_start));
  					appendStringInfoString(buf, strfbuf);
  				}
  				break;
--- 1557,1563 ----
  #else
  							 "%Y-%m-%d %H:%M:%S",
  #endif
! 							 localtime(&MyStartTime));
  					appendStringInfoString(buf, strfbuf);
  				}
  				break;
Index: src/backend/utils/init/globals.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/init/globals.c,v
retrieving revision 1.101
diff -c -r1.101 globals.c
*** src/backend/utils/init/globals.c	16 Apr 2007 18:29:54 -0000	1.101
--- src/backend/utils/init/globals.c	29 Jul 2007 18:14:21 -0000
***************
*** 33,38 ****
--- 33,39 ----
  volatile uint32 CritSectionCount = 0;
  
  int			MyProcPid;
+ time_t      MyStartTime;
  struct Port *MyProcPort;
  long		MyCancelKey;
  
Index: src/include/miscadmin.h
===================================================================
RCS file: /cvsroot/pgsql/src/include/miscadmin.h,v
retrieving revision 1.195
diff -c -r1.195 miscadmin.h
*** src/include/miscadmin.h	25 Jul 2007 12:22:53 -0000	1.195
--- src/include/miscadmin.h	29 Jul 2007 18:14:22 -0000
***************
*** 23,28 ****
--- 23,30 ----
  #ifndef MISCADMIN_H
  #define MISCADMIN_H
  
+ #include <time.h> /* for time_t */
+ 
  
  #define PG_VERSIONSTR "postgres (PostgreSQL) " PG_VERSION "\n"
  
***************
*** 132,137 ****
--- 134,140 ----
  extern int	MaxConnections;
  
  extern PGDLLIMPORT int MyProcPid;
+ extern PGDLLIMPORT time_t MyStartTime;
  extern PGDLLIMPORT struct Port *MyProcPort;
  extern long MyCancelKey;
  
Index: src/include/libpq/libpq-be.h
===================================================================
RCS file: /cvsroot/pgsql/src/include/libpq/libpq-be.h,v
retrieving revision 1.62
diff -c -r1.62 libpq-be.h
*** src/include/libpq/libpq-be.h	23 Jul 2007 10:16:54 -0000	1.62
--- src/include/libpq/libpq-be.h	29 Jul 2007 18:14:22 -0000
***************
*** 130,136 ****
  	 * other members of this struct, we may as well keep it here.
  	 */
  	TimestampTz SessionStartTime;		/* backend start time */
- 	time_t		session_start;	/* same, in time_t format */
  
  	/*
  	 * TCP keepalive settings.
--- 130,135 ----
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to