Alvaro Herrera wrote:
My original thought was that it needed to be set anywhere MyProcPid was
set. That still seems to make sense, it just looks like I missed a few
places, which I should fix.
+1 because of cleanliness, even if some calls turn out to be redundant.
That was in fact what I initially thought you were doing.
OK, here's the revised patch.
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 1 Aug 2007 23:51:02 -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/bootstrap/bootstrap.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v
retrieving revision 1.235
diff -c -r1.235 bootstrap.c
*** src/backend/bootstrap/bootstrap.c 24 Jul 2007 04:54:09 -0000 1.235
--- src/backend/bootstrap/bootstrap.c 1 Aug 2007 23:51:04 -0000
***************
*** 213,218 ****
--- 213,220 ----
*/
MyProcPid = getpid();
+ MyStartTime = time(NULL);
+
/*
* Fire up essential subsystems: error and memory management
*
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 1 Aug 2007 23:51:05 -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 1 Aug 2007 23:51:05 -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 1 Aug 2007 23:51:07 -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 1 Aug 2007 23:51:10 -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/postmaster/syslogger.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/syslogger.c,v
retrieving revision 1.33
diff -c -r1.33 syslogger.c
*** src/backend/postmaster/syslogger.c 19 Jul 2007 19:13:43 -0000 1.33
--- src/backend/postmaster/syslogger.c 1 Aug 2007 23:51:10 -0000
***************
*** 162,167 ****
--- 162,169 ----
MyProcPid = getpid(); /* reset MyProcPid */
+ MyStartTime = time(NULL); /* set our start time in case we call elog */
+
#ifdef EXEC_BACKEND
syslogger_parseArgs(argc, argv);
#endif /* EXEC_BACKEND */
Index: src/backend/tcop/postgres.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.536
diff -c -r1.536 postgres.c
*** src/backend/tcop/postgres.c 9 Jul 2007 01:15:14 -0000 1.536
--- src/backend/tcop/postgres.c 1 Aug 2007 23:51:13 -0000
***************
*** 2786,2791 ****
--- 2786,2793 ----
*/
MyProcPid = getpid();
+ MyStartTime = time(NULL);
+
/*
* Fire up essential subsystems: error and memory management
*
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 1 Aug 2007 23:51:14 -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 1 Aug 2007 23:51:14 -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 1 Aug 2007 23:51:15 -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 1 Aug 2007 23:51:16 -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 4: Have you searched our list archives?
http://archives.postgresql.org