Re: uptime function to postmaster - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: uptime function to postmaster |
Date | |
Msg-id | 200501230459.j0N4x1P28693@candle.pha.pa.us Whole thread Raw |
In response to | Re: uptime function to postmaster (Euler Taveira de Oliveira <eulerto@yahoo.com.br>) |
List | pgsql-patches |
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(¶m->pgStatPipe1, pgStatPipe[1], childPid); > > param->PostmasterPid = PostmasterPid; > + param->StartTime = StartTime; > > #ifdef WIN32 > param->PostmasterHandle = PostmasterHandle; > *************** > *** 3871,3876 **** > --- 3885,3891 ---- > read_inheritable_socket(&pgStatPipe[1], ¶m->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
pgsql-patches by date: