uptime function to postmaster

Started by Euler Taveira de Oliveiraover 21 years ago18 messagespatches
Jump to latest

Hi,

This patch just implement a function that returns the uptime of the
postmaster. The docs are included too.
Another TODO item could be implement a function that returns the
startup time. If nobody objects I can do it.
Finally, I do not forbid non-superusers to execute it, but we can do
this if you prefer.
Comments?

Please review it and apply it.

PS> Hold it for 8.1.

=====
Euler Taveira de Oliveira
euler[at]yahoo_com_br

_______________________________________________________
Yahoo! Acesso Gr�tis - Instale o discador do Yahoo! agora. http://br.acesso.yahoo.com/ - Internet r�pida e gr�tis

Attachments:

uptime2.diffapplication/octet-stream; name=uptime2.diffDownload+118-2
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Euler Taveira de Oliveira (#1)
Re: uptime function to postmaster

Euler Taveira de Oliveira <eulerto@yahoo.com.br> writes:

This patch just implement a function that returns the uptime of the
postmaster.

Doesn't work in EXEC_BACKEND case.

regards, tom lane

In reply to: Tom Lane (#2)
Re: uptime function to postmaster

Hi Tom,

This patch just implement a function that returns the uptime of the
postmaster.

Doesn't work in EXEC_BACKEND case.

Sorry. I'll fix this.

=====
Euler Taveira de Oliveira
euler[at]yahoo_com_br

_______________________________________________________
Yahoo! Acesso Gr�tis - Instale o discador do Yahoo! agora. http://br.acesso.yahoo.com/ - Internet r�pida e gr�tis

In reply to: Euler Taveira de Oliveira (#3)
Re: uptime function to postmaster

Hi,

This patch just implement a function that returns the uptime of

the

postmaster.

Doesn't work in EXEC_BACKEND case.

Sorry. I'll fix this.

Patch updated. I improved the function output too.

Comments?

=====
Euler Taveira de Oliveira
euler[at]yahoo_com_br

__________________________________________________
Converse com seus amigos em tempo real com o Yahoo! Messenger
http://br.download.yahoo.com/messenger/

Attachments:

uptime3.diffapplication/octet-stream; name=uptime3.diffDownload+126-2
#5Alvaro Herrera
alvherre@dcc.uchile.cl
In reply to: Euler Taveira de Oliveira (#4)
Re: uptime function to postmaster

On Wed, Dec 22, 2004 at 12:57:34AM -0300, Euler Taveira de Oliveira wrote:

Hi,

Patch updated. I improved the function output too.

Is it really a good idea to have a new file for only one function?
We regularly see complaints about not wanting to do basic source code
cleanup because not wanting to disrupt CVS history ...

--
Alvaro Herrera (<alvherre[@]dcc.uchile.cl>)
"El hombre nunca sabe de lo que es capaz hasta que lo intenta" (C. Dickens)

In reply to: Alvaro Herrera (#5)
Re: uptime function to postmaster

Hi Alvaro,

Patch updated. I improved the function output too.

Is it really a good idea to have a new file for only one function?
We regularly see complaints about not wanting to do basic source code
cleanup because not wanting to disrupt CVS history ...

I couldn't see a good place to put it. Any suggestion?

=====
Euler Taveira de Oliveira
euler[at]yahoo_com_br

_______________________________________________________
Yahoo! Acesso Gr�tis - Instale o discador do Yahoo! agora. http://br.acesso.yahoo.com/ - Internet r�pida e gr�tis

#7Bruce Momjian
bruce@momjian.us
In reply to: Euler Taveira de Oliveira (#4)
Re: uptime function to postmaster

This has been saved for the 8.1 release:

http:/momjian.postgresql.org/cgi-bin/pgpatches2

---------------------------------------------------------------------------

Euler Taveira de Oliveira wrote:

Hi,

This patch just implement a function that returns the uptime of

the

postmaster.

Doesn't work in EXEC_BACKEND case.

Sorry. I'll fix this.

Patch updated. I improved the function output too.

Comments?

=====
Euler Taveira de Oliveira
euler[at]yahoo_com_br

__________________________________________________
Converse com seus amigos em tempo real com o Yahoo! Messenger
http://br.download.yahoo.com/messenger/

Content-Description: uptime3.diff

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
In reply to: Bruce Momjian (#7)
Re: uptime function to postmaster

Bruce Momjian wrote:

This has been saved for the 8.1 release:

http:/momjian.postgresql.org/cgi-bin/pgpatches2

---------------------------------------------------------------------------

Hi,

I redo this patch adding the funcionality that Matthias implemented
(starttime). Basically I changed the uptime()'s return type to
'interval' (more funcional now, uh?) and rework in the Matthias
function (start_time()). The last one return type is 'timestamp with
time zone'. The docs are attached to, but maybe need some
work on it.

Comments?

=====
Euler Taveira de Oliveira
euler[at]yahoo_com_br

_______________________________________________________
Yahoo! Acesso Gr�tis - Instale o discador do Yahoo! agora. http://br.acesso.yahoo.com/ - Internet r�pida e gr�tis

Attachments:

uptime5.difftext/plain; name=uptime5.diffDownload+92-0
#9Bruce Momjian
bruce@momjian.us
In reply to: Euler Taveira de Oliveira (#8)
Re: uptime function to postmaster

This has been saved for the 8.1 release:

http://momjian.postgresql.org/cgi-bin/pgpatches2

---------------------------------------------------------------------------

Euler Taveira de Oliveira wrote:

Bruce Momjian wrote:

This has been saved for the 8.1 release:

http:/momjian.postgresql.org/cgi-bin/pgpatches2

---------------------------------------------------------------------------

Hi,

I redo this patch adding the funcionality that Matthias implemented
(starttime). Basically I changed the uptime()'s return type to
'interval' (more funcional now, uh?) and rework in the Matthias
function (start_time()). The last one return type is 'timestamp with
time zone'. The docs are attached to, but maybe need some
work on it.

Comments?

=====
Euler Taveira de Oliveira
euler[at]yahoo_com_br

_______________________________________________________
Yahoo! Acesso Gr?tis - Instale o discador do Yahoo! agora. http://br.acesso.yahoo.com/ - Internet r?pida e gr?tis

Content-Description: uptime5.diff

*** ./doc/src/sgml/func.sgml.orig	2005-01-20 18:23:48.000000000 -0200
--- ./doc/src/sgml/func.sgml	2005-01-20 16:44:52.000000000 -0200
***************
*** 8060,8065 ****
--- 8060,8077 ----
</row>
<row>
+        <entry><function>start_time()</function></entry>
+        <entry><type>timestamp with time zone</type></entry>
+        <entry>PostgreSQL startup date and time</entry>
+       </row>
+ 
+       <row>
+        <entry><function>uptime()</function></entry>
+        <entry><type>interval</type></entry>
+        <entry>PostgreSQL uptime information</entry>
+       </row>
+ 
+       <row>
<entry><function>user</function></entry>
<entry><type>name</type></entry>
<entry>equivalent to <function>current_user</function></entry>
***************
*** 8157,8162 ****
--- 8169,8192 ----
</para>
<indexterm zone="functions-info">
+     <primary>start_time</primary>
+    </indexterm>
+ 
+    <para>
+      <function>start_time()</function> returns the timestamp with time zone
+      which the <productname>PostgreSQL</productname> was started.
+    </para>
+ 
+    <indexterm zone="functions-info">
+     <primary>uptime</primary>
+    </indexterm>
+ 
+    <para>
+      <function>uptime()</function> returns the <productname>PostgreSQL</>
+      uptime information.
+    </para>
+ 
+    <indexterm zone="functions-info">
<primary>version</primary>
</indexterm>
*** ./src/backend/postmaster/postmaster.c.orig	2005-01-20 18:24:36.000000000 -0200
--- ./src/backend/postmaster/postmaster.c	2005-01-20 16:44:52.000000000 -0200
***************
*** 221,226 ****
--- 221,229 ----
bool		ClientAuthInProgress = false;		/* T during new-client
* authentication */
+ /* Backend startup time */
+ TimestampTz	StartTime;
+ 
/*
* State for assigning random salts and cancel keys.
* Also, the global MyCancelKey passes the cancel key assigned to a given
***************
*** 329,334 ****
--- 332,338 ----
InheritableSocket pgStatPipe0;
InheritableSocket pgStatPipe1;
pid_t PostmasterPid;
+ 	TimestampTz StartTime;
#ifdef WIN32
HANDLE PostmasterHandle;
HANDLE initial_signal_pipe;
***************
*** 371,376 ****
--- 375,383 ----
char	   *userDoption = NULL;
int			i;
+ 	AbsoluteTime		StartTimeSec;	/* integer part */
+ 	int			StartTimeUSec;	/* microsecond part */
+ 
/* This will call exit() if strdup() fails. */
progname = get_progname(argv[0]);	
***************
*** 915,920 ****
--- 922,933 ----
*/
StartupPID = StartupDataBase();
+ 	/*
+ 	 * Get start up time
+ 	 */
+ 	StartTimeSec = GetCurrentAbsoluteTimeUsec(&StartTimeUSec);
+ 	StartTime = AbsoluteTimeUsecToTimestampTz(StartTimeSec, StartTimeUSec);
+ 
status = ServerLoop();
/*
***************
*** 3669,3674 ****
--- 3682,3688 ----
write_inheritable_socket(&param->pgStatPipe1, pgStatPipe[1], childPid);

param->PostmasterPid = PostmasterPid;
+ param->StartTime = StartTime;

#ifdef WIN32
param->PostmasterHandle = PostmasterHandle;
***************
*** 3871,3876 ****
--- 3885,3891 ----
read_inheritable_socket(&pgStatPipe[1], &param->pgStatPipe1);

PostmasterPid = param->PostmasterPid;
+ StartTime = param->StartTime;

#ifdef WIN32
PostmasterHandle = param->PostmasterHandle;
*** ./src/backend/tcop/postgres.c.orig	2005-01-20 18:39:18.000000000 -0200
--- ./src/backend/tcop/postgres.c	2005-01-20 18:15:07.000000000 -0200
***************
*** 144,149 ****
--- 144,152 ----
#endif   /* TCOP_DONTUSENEWLINE */
+ /* Backend startup time */
+ TimestampTz	StartTime;
+ 
/* ----------------------------------------------------------------
*		decls for routines only used in this file
* ----------------------------------------------------------------
***************
*** 2217,2222 ****
--- 2220,2228 ----
sigjmp_buf	local_sigjmp_buf;
volatile bool send_rfq = true;
+ 	AbsoluteTime            StartTimeSec;   /* integer part */
+ 	int                     StartTimeUSec;  /* microsecond part */
+ 
#define PendingConfigOption(name,val) \
(guc_names = lappend(guc_names, pstrdup(name)), \
guc_values = lappend(guc_values, pstrdup(val)))
***************
*** 2896,2901 ****
--- 2902,2916 ----
send_rfq = true;		/* initially, or after error */
/*
+ 	 * Get stand-alone backend startup time
+ 	 */
+ 	if (!IsUnderPostmaster)
+ 	{
+ 		StartTimeSec = GetCurrentAbsoluteTimeUsec(&StartTimeUSec);
+ 		StartTime = AbsoluteTimeUsecToTimestampTz(StartTimeSec, StartTimeUSec);
+ 	}
+ 
+ 	/*
* Non-error queries loop here.
*/
*** ./src/backend/utils/adt/timestamp.c.orig	2005-01-20 18:42:00.000000000 -0200
--- ./src/backend/utils/adt/timestamp.c	2005-01-20 16:44:52.000000000 -0200
***************
*** 941,946 ****
--- 941,967 ----
PG_RETURN_TIMESTAMPTZ(result);
}
+ Datum
+ pgsql_start_time(PG_FUNCTION_ARGS)
+ {
+ 	PG_RETURN_TIMESTAMPTZ(StartTime);
+ }
+ 
+ Datum
+ pgsql_uptime(PG_FUNCTION_ARGS)
+ {
+ 	TimestampTz	tznow;
+ 	AbsoluteTime	sec;
+ 	int		usec;
+ 
+ 	sec = GetCurrentTransactionStartTimeUsec(&usec);
+ 	tznow = AbsoluteTimeUsecToTimestampTz(sec, usec);
+ 
+ 	PG_RETURN_DATUM(DirectFunctionCall2(timestamptz_age,
+ 			TimestampTzGetDatum(tznow),
+ 			TimestampTzGetDatum(StartTime)));
+ }
+ 
void
dt2time(Timestamp jd, int *hour, int *min, int *sec, fsec_t *fsec)
{
*** ./src/include/catalog/pg_proc.h.orig	2005-01-20 18:43:28.000000000 -0200
--- ./src/include/catalog/pg_proc.h	2005-01-20 16:44:52.000000000 -0200
***************
*** 3604,3609 ****
--- 3604,3615 ----
DATA(insert OID = 2556 ( pg_tablespace_databases	PGNSP PGUID 12 f f t t s 1 26 "26" _null_ pg_tablespace_databases - _null_));
DESCR("returns database oids in a tablespace");
+ /* startuptime/uptime functions */
+ DATA(insert OID = 2557 (  start_time PGNSP PGUID 12 f f t f s 0 1184 "" _null_	pgsql_start_time - _null_ ));
+ DESCR("PostgreSQL start time");
+ DATA(insert OID = 2558 (  uptime PGNSP PGUID 12 f f t f s 0 1186 "" _null_	pgsql_uptime - _null_ ));
+ DESCR("PostgreSQL uptime");
+ 
/*
* Symbolic values for provolatile column: these indicate whether the result
*** ./src/include/utils/timestamp.h.orig	2005-01-20 18:45:58.000000000 -0200
--- ./src/include/utils/timestamp.h	2005-01-20 16:44:52.000000000 -0200
***************
*** 249,254 ****
--- 249,259 ----

extern Datum now(PG_FUNCTION_ARGS);

+ extern Datum pgsql_start_time(PG_FUNCTION_ARGS);
+ extern Datum pgsql_uptime(PG_FUNCTION_ARGS);
+ 
+ extern TimestampTz StartTime;
+ 
/* Internal routines (not fmgr-callable) */

extern int tm2timestamp(struct pg_tm * tm, fsec_t fsec, int *tzp, Timestamp *dt);

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#10Bruce Momjian
bruce@momjian.us
In reply to: Euler Taveira de Oliveira (#8)
Re: uptime function to postmaster

I think we are best with just pg_startime. If people want the interval
they can subtract it from CURRENT_TIMESTAMP. I have added Matthias's
version to the patch queue.

---------------------------------------------------------------------------

Euler Taveira de Oliveira wrote:

Bruce Momjian wrote:

This has been saved for the 8.1 release:

http:/momjian.postgresql.org/cgi-bin/pgpatches2

---------------------------------------------------------------------------

Hi,

I redo this patch adding the funcionality that Matthias implemented
(starttime). Basically I changed the uptime()'s return type to
'interval' (more funcional now, uh?) and rework in the Matthias
function (start_time()). The last one return type is 'timestamp with
time zone'. The docs are attached to, but maybe need some
work on it.

Comments?

=====
Euler Taveira de Oliveira
euler[at]yahoo_com_br

_______________________________________________________
Yahoo! Acesso Gr?tis - Instale o discador do Yahoo! agora. http://br.acesso.yahoo.com/ - Internet r?pida e gr?tis

Content-Description: uptime5.diff

*** ./doc/src/sgml/func.sgml.orig	2005-01-20 18:23:48.000000000 -0200
--- ./doc/src/sgml/func.sgml	2005-01-20 16:44:52.000000000 -0200
***************
*** 8060,8065 ****
--- 8060,8077 ----
</row>
<row>
+        <entry><function>start_time()</function></entry>
+        <entry><type>timestamp with time zone</type></entry>
+        <entry>PostgreSQL startup date and time</entry>
+       </row>
+ 
+       <row>
+        <entry><function>uptime()</function></entry>
+        <entry><type>interval</type></entry>
+        <entry>PostgreSQL uptime information</entry>
+       </row>
+ 
+       <row>
<entry><function>user</function></entry>
<entry><type>name</type></entry>
<entry>equivalent to <function>current_user</function></entry>
***************
*** 8157,8162 ****
--- 8169,8192 ----
</para>
<indexterm zone="functions-info">
+     <primary>start_time</primary>
+    </indexterm>
+ 
+    <para>
+      <function>start_time()</function> returns the timestamp with time zone
+      which the <productname>PostgreSQL</productname> was started.
+    </para>
+ 
+    <indexterm zone="functions-info">
+     <primary>uptime</primary>
+    </indexterm>
+ 
+    <para>
+      <function>uptime()</function> returns the <productname>PostgreSQL</>
+      uptime information.
+    </para>
+ 
+    <indexterm zone="functions-info">
<primary>version</primary>
</indexterm>
*** ./src/backend/postmaster/postmaster.c.orig	2005-01-20 18:24:36.000000000 -0200
--- ./src/backend/postmaster/postmaster.c	2005-01-20 16:44:52.000000000 -0200
***************
*** 221,226 ****
--- 221,229 ----
bool		ClientAuthInProgress = false;		/* T during new-client
* authentication */
+ /* Backend startup time */
+ TimestampTz	StartTime;
+ 
/*
* State for assigning random salts and cancel keys.
* Also, the global MyCancelKey passes the cancel key assigned to a given
***************
*** 329,334 ****
--- 332,338 ----
InheritableSocket pgStatPipe0;
InheritableSocket pgStatPipe1;
pid_t PostmasterPid;
+ 	TimestampTz StartTime;
#ifdef WIN32
HANDLE PostmasterHandle;
HANDLE initial_signal_pipe;
***************
*** 371,376 ****
--- 375,383 ----
char	   *userDoption = NULL;
int			i;
+ 	AbsoluteTime		StartTimeSec;	/* integer part */
+ 	int			StartTimeUSec;	/* microsecond part */
+ 
/* This will call exit() if strdup() fails. */
progname = get_progname(argv[0]);	
***************
*** 915,920 ****
--- 922,933 ----
*/
StartupPID = StartupDataBase();
+ 	/*
+ 	 * Get start up time
+ 	 */
+ 	StartTimeSec = GetCurrentAbsoluteTimeUsec(&StartTimeUSec);
+ 	StartTime = AbsoluteTimeUsecToTimestampTz(StartTimeSec, StartTimeUSec);
+ 
status = ServerLoop();
/*
***************
*** 3669,3674 ****
--- 3682,3688 ----
write_inheritable_socket(&param->pgStatPipe1, pgStatPipe[1], childPid);

param->PostmasterPid = PostmasterPid;
+ param->StartTime = StartTime;

#ifdef WIN32
param->PostmasterHandle = PostmasterHandle;
***************
*** 3871,3876 ****
--- 3885,3891 ----
read_inheritable_socket(&pgStatPipe[1], &param->pgStatPipe1);

PostmasterPid = param->PostmasterPid;
+ StartTime = param->StartTime;

#ifdef WIN32
PostmasterHandle = param->PostmasterHandle;
*** ./src/backend/tcop/postgres.c.orig	2005-01-20 18:39:18.000000000 -0200
--- ./src/backend/tcop/postgres.c	2005-01-20 18:15:07.000000000 -0200
***************
*** 144,149 ****
--- 144,152 ----
#endif   /* TCOP_DONTUSENEWLINE */
+ /* Backend startup time */
+ TimestampTz	StartTime;
+ 
/* ----------------------------------------------------------------
*		decls for routines only used in this file
* ----------------------------------------------------------------
***************
*** 2217,2222 ****
--- 2220,2228 ----
sigjmp_buf	local_sigjmp_buf;
volatile bool send_rfq = true;
+ 	AbsoluteTime            StartTimeSec;   /* integer part */
+ 	int                     StartTimeUSec;  /* microsecond part */
+ 
#define PendingConfigOption(name,val) \
(guc_names = lappend(guc_names, pstrdup(name)), \
guc_values = lappend(guc_values, pstrdup(val)))
***************
*** 2896,2901 ****
--- 2902,2916 ----
send_rfq = true;		/* initially, or after error */
/*
+ 	 * Get stand-alone backend startup time
+ 	 */
+ 	if (!IsUnderPostmaster)
+ 	{
+ 		StartTimeSec = GetCurrentAbsoluteTimeUsec(&StartTimeUSec);
+ 		StartTime = AbsoluteTimeUsecToTimestampTz(StartTimeSec, StartTimeUSec);
+ 	}
+ 
+ 	/*
* Non-error queries loop here.
*/
*** ./src/backend/utils/adt/timestamp.c.orig	2005-01-20 18:42:00.000000000 -0200
--- ./src/backend/utils/adt/timestamp.c	2005-01-20 16:44:52.000000000 -0200
***************
*** 941,946 ****
--- 941,967 ----
PG_RETURN_TIMESTAMPTZ(result);
}
+ Datum
+ pgsql_start_time(PG_FUNCTION_ARGS)
+ {
+ 	PG_RETURN_TIMESTAMPTZ(StartTime);
+ }
+ 
+ Datum
+ pgsql_uptime(PG_FUNCTION_ARGS)
+ {
+ 	TimestampTz	tznow;
+ 	AbsoluteTime	sec;
+ 	int		usec;
+ 
+ 	sec = GetCurrentTransactionStartTimeUsec(&usec);
+ 	tznow = AbsoluteTimeUsecToTimestampTz(sec, usec);
+ 
+ 	PG_RETURN_DATUM(DirectFunctionCall2(timestamptz_age,
+ 			TimestampTzGetDatum(tznow),
+ 			TimestampTzGetDatum(StartTime)));
+ }
+ 
void
dt2time(Timestamp jd, int *hour, int *min, int *sec, fsec_t *fsec)
{
*** ./src/include/catalog/pg_proc.h.orig	2005-01-20 18:43:28.000000000 -0200
--- ./src/include/catalog/pg_proc.h	2005-01-20 16:44:52.000000000 -0200
***************
*** 3604,3609 ****
--- 3604,3615 ----
DATA(insert OID = 2556 ( pg_tablespace_databases	PGNSP PGUID 12 f f t t s 1 26 "26" _null_ pg_tablespace_databases - _null_));
DESCR("returns database oids in a tablespace");
+ /* startuptime/uptime functions */
+ DATA(insert OID = 2557 (  start_time PGNSP PGUID 12 f f t f s 0 1184 "" _null_	pgsql_start_time - _null_ ));
+ DESCR("PostgreSQL start time");
+ DATA(insert OID = 2558 (  uptime PGNSP PGUID 12 f f t f s 0 1186 "" _null_	pgsql_uptime - _null_ ));
+ DESCR("PostgreSQL uptime");
+ 
/*
* Symbolic values for provolatile column: these indicate whether the result
*** ./src/include/utils/timestamp.h.orig	2005-01-20 18:45:58.000000000 -0200
--- ./src/include/utils/timestamp.h	2005-01-20 16:44:52.000000000 -0200
***************
*** 249,254 ****
--- 249,259 ----

extern Datum now(PG_FUNCTION_ARGS);

+ extern Datum pgsql_start_time(PG_FUNCTION_ARGS);
+ extern Datum pgsql_uptime(PG_FUNCTION_ARGS);
+ 
+ extern TimestampTz StartTime;
+ 
/* Internal routines (not fmgr-callable) */

extern int tm2timestamp(struct pg_tm * tm, fsec_t fsec, int *tzp, Timestamp *dt);

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
In reply to: Bruce Momjian (#10)
Re: uptime function to postmaster

Hi Bruce,

I think we are best with just pg_startime. If people want the
interval
they can subtract it from CURRENT_TIMESTAMP. I have added Matthias's
version to the patch queue.

OK. But IIRC the Matthias implementation doesn't work in standalone
mode. And talking about the 'interval', I think it's too ugly make
this:
select CURRENT_TIMESTAMP - pg_starttime();

Isn't it more simple do this?
select pg_uptime();

I think few people will use start_time and more people will use uptime
that's why I propose the 'uptime' function.

Talking abouts names, IMHO we need to go with uptime() and
start_time(). Why? That's because a system function and it's about
server. When we implement backend uptime, we can go with
connection_uptime() and connection_start_time().

Comments?

Euler Taveira de Oliveira
euler[at]yahoo_com_br

__________________________________________________
Converse com seus amigos em tempo real com o Yahoo! Messenger
http://br.download.yahoo.com/messenger/

#12Bruce Momjian
bruce@momjian.us
In reply to: Euler Taveira de Oliveira (#11)
Re: uptime function to postmaster

Euler Taveira de Oliveira wrote:

Hi Bruce,

I think we are best with just pg_startime. If people want the
interval
they can subtract it from CURRENT_TIMESTAMP. I have added Matthias's
version to the patch queue.

OK. But IIRC the Matthias implementation doesn't work in standalone
mode. And talking about the 'interval', I think it's too ugly make
this:
select CURRENT_TIMESTAMP - pg_starttime();

Isn't it more simple do this?
select pg_uptime();

I think we should return intervals only when we can't return meaningful
timestamp values. I don't have any logic to back up that opinion, though.

I think few people will use start_time and more people will use uptime
that's why I propose the 'uptime' function.

We need to preceed our function names with pg_ for cases like this where
we are supplying pg-specific behavior.

Talking abouts names, IMHO we need to go with uptime() and
start_time(). Why? That's because a system function and it's about
server. When we implement backend uptime, we can go with
connection_uptime() and connection_start_time().

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#13Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#12)
Re: uptime function to postmaster

Bruce Momjian <pgman@candle.pha.pa.us> writes:

I think we should return intervals only when we can't return meaningful
timestamp values. I don't have any logic to back up that opinion, though.

It's easy: a value measured as an interval will be obsolete by the time
it's delivered to the client. A start timestamp is actually meaningful
information that will still be correct when used; uptime is fragile.

regards, tom lane

In reply to: Bruce Momjian (#12)
Re: uptime function to postmaster

Hi Bruce,

I think we should return intervals only when we can't return
meaningful
timestamp values. I don't have any logic to back up that opinion,
though.

Agreed.

We need to preceed our function names with pg_ for cases like this
where
we are supplying pg-specific behavior.

Agreed.

An updated version of the patch is attached. It is just implement
'pg_start_time' function that works in multi-user and stand-alone. Docs
is attached too.

Comments?

Euler Taveira de Oliveira
euler[at]yahoo_com_br

__________________________________________________
Converse com seus amigos em tempo real com o Yahoo! Messenger
http://br.download.yahoo.com/messenger/

Attachments:

uptime6.diffapplication/octet-stream; name=uptime6.diffDownload+59-0
#15Bruce Momjian
bruce@momjian.us
In reply to: Euler Taveira de Oliveira (#14)
Re: uptime function to postmaster

I think we agreed on pg_postmaster_start_time() so it is clear it is the
postmaster, and not the session.

Your patch has been added to the PostgreSQL unapplied patches list at:

http://momjian.postgresql.org/cgi-bin/pgpatches

It will be applied as soon as one of the PostgreSQL committers reviews
and approves it.

---------------------------------------------------------------------------

Euler Taveira de Oliveira wrote:

Hi Bruce,

I think we should return intervals only when we can't return
meaningful
timestamp values. I don't have any logic to back up that opinion,
though.

Agreed.

We need to preceed our function names with pg_ for cases like this
where
we are supplying pg-specific behavior.

Agreed.

An updated version of the patch is attached. It is just implement
'pg_start_time' function that works in multi-user and stand-alone. Docs
is attached too.

Comments?

Euler Taveira de Oliveira
euler[at]yahoo_com_br

__________________________________________________
Converse com seus amigos em tempo real com o Yahoo! Messenger
http://br.download.yahoo.com/messenger/

Content-Description: 958887538-uptime6.diff

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#16Bruce Momjian
bruce@momjian.us
In reply to: Euler Taveira de Oliveira (#14)
Re: uptime function to postmaster

Euler Taveira de Oliveira wrote:

Hi Bruce,

I think we should return intervals only when we can't return
meaningful
timestamp values. I don't have any logic to back up that opinion,
though.

Agreed.

We need to preceed our function names with pg_ for cases like this
where
we are supplying pg-specific behavior.

Agreed.

An updated version of the patch is attached. It is just implement
'pg_start_time' function that works in multi-user and stand-alone. Docs
is attached too.

I have applied the attached patch, calling the function
pg_postmaster_start_time(). I realize a stand-alone backend doesn't
have a postmaster, but this is probably as clear as we are going to get.

Do we want this to be executed only by super-users? I know there was
some discussion about that but I didn't see a conclusion. The only
argument I heard was something about random seeds, but that seemed like
a weak argument.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Attachments:

/bjm/difftext/plainDownload+59-0
#17Neil Conway
neilc@samurai.com
In reply to: Bruce Momjian (#12)
Re: uptime function to postmaster

Bruce Momjian wrote:

We need to preceed our function names with pg_ for cases like this where
we are supplying pg-specific behavior.

We do? I'm not sure I can see much of a consistent naming convention for
functions like these: version(), obj_description(), has_xyz_privilege(),
format_type(), set_config(), and the like are surely "pg-specific", for
example.

-Neil

#18Bruce Momjian
bruce@momjian.us
In reply to: Neil Conway (#17)
Re: uptime function to postmaster

Neil Conway wrote:

Bruce Momjian wrote:

We need to preceed our function names with pg_ for cases like this where
we are supplying pg-specific behavior.

We do? I'm not sure I can see much of a consistent naming convention for
functions like these: version(), obj_description(), has_xyz_privilege(),
format_type(), set_config(), and the like are surely "pg-specific", for
example.

Yea, seems we aren't consistent.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073