Commit 600da67f authored by Tom Lane's avatar Tom Lane

Add pg_conf_load_time() function to report when the Postgres configuration

files were last loaded.

George Gensure
parent 45173ae2
<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.434 2008/04/28 14:48:57 alvherre Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.435 2008/05/04 21:13:35 tgl Exp $ -->
<chapter id="functions"> <chapter id="functions">
<title>Functions and Operators</title> <title>Functions and Operators</title>
...@@ -10891,6 +10891,12 @@ postgres=# select * from unnest2(array[[1,2],[3,4]]); ...@@ -10891,6 +10891,12 @@ postgres=# select * from unnest2(array[[1,2],[3,4]]);
<entry>server start time</entry> <entry>server start time</entry>
</row> </row>
<row>
<entry><literal><function>pg_conf_load_time</function>()</literal></entry>
<entry><type>timestamp with time zone</type></entry>
<entry>configuration load time</entry>
</row>
<row> <row>
<entry><literal><function>session_user</function></literal></entry> <entry><literal><function>session_user</function></literal></entry>
<entry><type>name</type></entry> <entry><type>name</type></entry>
...@@ -11036,6 +11042,20 @@ SET search_path TO <replaceable>schema</> <optional>, <replaceable>schema</>, .. ...@@ -11036,6 +11042,20 @@ SET search_path TO <replaceable>schema</> <optional>, <replaceable>schema</>, ..
server started. server started.
</para> </para>
<indexterm>
<primary>pg_conf_load_time</primary>
</indexterm>
<para>
<function>pg_conf_load_time</function> returns the
<type>timestamp with time zone</type> when the
server configuration files were last loaded.
(If the current session was alive at the time, this will be the time
when the session itself re-read the configuration files, so the
reading will vary a little in different sessions. Otherwise it is
the time when the postmaster process re-read the configuration files.)
</para>
<indexterm> <indexterm>
<primary>version</primary> <primary>version</primary>
</indexterm> </indexterm>
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.556 2008/04/26 22:47:40 tgl Exp $ * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.557 2008/05/04 21:13:35 tgl Exp $
* *
* NOTES * NOTES
* *
...@@ -390,6 +390,7 @@ typedef struct ...@@ -390,6 +390,7 @@ typedef struct
InheritableSocket pgStatSock; InheritableSocket pgStatSock;
pid_t PostmasterPid; pid_t PostmasterPid;
TimestampTz PgStartTime; TimestampTz PgStartTime;
TimestampTz PgReloadTime;
bool redirection_done; bool redirection_done;
#ifdef WIN32 #ifdef WIN32
HANDLE PostmasterHandle; HANDLE PostmasterHandle;
...@@ -4263,6 +4264,7 @@ save_backend_variables(BackendParameters * param, Port *port, ...@@ -4263,6 +4264,7 @@ save_backend_variables(BackendParameters * param, Port *port,
param->PostmasterPid = PostmasterPid; param->PostmasterPid = PostmasterPid;
param->PgStartTime = PgStartTime; param->PgStartTime = PgStartTime;
param->PgReloadTime = PgReloadTime;
param->redirection_done = redirection_done; param->redirection_done = redirection_done;
...@@ -4468,6 +4470,7 @@ restore_backend_variables(BackendParameters * param, Port *port) ...@@ -4468,6 +4470,7 @@ restore_backend_variables(BackendParameters * param, Port *port)
PostmasterPid = param->PostmasterPid; PostmasterPid = param->PostmasterPid;
PgStartTime = param->PgStartTime; PgStartTime = param->PgStartTime;
PgReloadTime = param->PgReloadTime;
redirection_done = param->redirection_done; redirection_done = param->redirection_done;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.187 2008/03/25 22:42:44 tgl Exp $ * $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.188 2008/05/04 21:13:35 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -42,6 +42,8 @@ ...@@ -42,6 +42,8 @@
/* Set at postmaster start */ /* Set at postmaster start */
TimestampTz PgStartTime; TimestampTz PgStartTime;
/* Set at configuration reload */
TimestampTz PgReloadTime;
static TimeOffset time2t(const int hour, const int min, const int sec, const fsec_t fsec); static TimeOffset time2t(const int hour, const int min, const int sec, const fsec_t fsec);
...@@ -1157,11 +1159,17 @@ clock_timestamp(PG_FUNCTION_ARGS) ...@@ -1157,11 +1159,17 @@ clock_timestamp(PG_FUNCTION_ARGS)
} }
Datum Datum
pgsql_postmaster_start_time(PG_FUNCTION_ARGS) pg_postmaster_start_time(PG_FUNCTION_ARGS)
{ {
PG_RETURN_TIMESTAMPTZ(PgStartTime); PG_RETURN_TIMESTAMPTZ(PgStartTime);
} }
Datum
pg_conf_load_time(PG_FUNCTION_ARGS)
{
PG_RETURN_TIMESTAMPTZ(PgReloadTime);
}
/* /*
* GetCurrentTimestamp -- get the current operating system time * GetCurrentTimestamp -- get the current operating system time
* *
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* *
* Copyright (c) 2000-2008, PostgreSQL Global Development Group * Copyright (c) 2000-2008, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/backend/utils/misc/guc-file.l,v 1.53 2008/01/01 19:45:54 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/misc/guc-file.l,v 1.54 2008/05/04 21:13:35 tgl Exp $
*/ */
%{ %{
...@@ -309,6 +309,9 @@ ProcessConfigFile(GucContext context) ...@@ -309,6 +309,9 @@ ProcessConfigFile(GucContext context)
PGC_S_FILE, GUC_ACTION_SET, true); PGC_S_FILE, GUC_ACTION_SET, true);
} }
/* Remember when we last successfully loaded the config file. */
PgReloadTime = GetCurrentTimestamp();
cleanup_list: cleanup_list:
free_name_value_list(head); free_name_value_list(head);
if (cvc) if (cvc)
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.453 2008/04/29 14:59:17 alvherre Exp $ * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.454 2008/05/04 21:13:35 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -53,6 +53,6 @@ ...@@ -53,6 +53,6 @@
*/ */
/* yyyymmddN */ /* yyyymmddN */
#define CATALOG_VERSION_NO 200804292 #define CATALOG_VERSION_NO 200805041
#endif #endif
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.494 2008/04/29 13:00:22 alvherre Exp $ * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.495 2008/05/04 21:13:36 tgl Exp $
* *
* NOTES * NOTES
* The script catalog/genbki.sh reads this file and generates .bki * The script catalog/genbki.sh reads this file and generates .bki
...@@ -3922,8 +3922,11 @@ DATA(insert OID = 2559 ( lastval PGNSP PGUID 12 1 0 f f t f v 0 20 "" _null ...@@ -3922,8 +3922,11 @@ DATA(insert OID = 2559 ( lastval PGNSP PGUID 12 1 0 f f t f v 0 20 "" _null
DESCR("current value from last used sequence"); DESCR("current value from last used sequence");
/* start time function */ /* start time function */
DATA(insert OID = 2560 ( pg_postmaster_start_time PGNSP PGUID 12 1 0 f f t f s 0 1184 "" _null_ _null_ _null_ pgsql_postmaster_start_time - _null_ _null_ )); DATA(insert OID = 2560 ( pg_postmaster_start_time PGNSP PGUID 12 1 0 f f t f s 0 1184 "" _null_ _null_ _null_ pg_postmaster_start_time - _null_ _null_ ));
DESCR("postmaster start time"); DESCR("postmaster start time");
/* config reload time function */
DATA(insert OID = 2034 ( pg_conf_load_time PGNSP PGUID 12 1 0 f f t f s 0 1184 "" _null_ _null_ _null_ pg_conf_load_time - _null_ _null_ ));
DESCR("configuration load time");
/* new functions for Y-direction rtree opclasses */ /* new functions for Y-direction rtree opclasses */
DATA(insert OID = 2562 ( box_below PGNSP PGUID 12 1 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_below - _null_ _null_ )); DATA(insert OID = 2562 ( box_below PGNSP PGUID 12 1 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_below - _null_ _null_ ));
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/utils/timestamp.h,v 1.76 2008/03/21 01:31:43 tgl Exp $ * $PostgreSQL: pgsql/src/include/utils/timestamp.h,v 1.77 2008/05/04 21:13:36 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -195,6 +195,8 @@ typedef struct ...@@ -195,6 +195,8 @@ typedef struct
/* Set at postmaster start */ /* Set at postmaster start */
extern TimestampTz PgStartTime; extern TimestampTz PgStartTime;
/* Set at configuration reload */
extern TimestampTz PgReloadTime;
/* /*
...@@ -303,7 +305,8 @@ extern Datum now(PG_FUNCTION_ARGS); ...@@ -303,7 +305,8 @@ extern Datum now(PG_FUNCTION_ARGS);
extern Datum statement_timestamp(PG_FUNCTION_ARGS); extern Datum statement_timestamp(PG_FUNCTION_ARGS);
extern Datum clock_timestamp(PG_FUNCTION_ARGS); extern Datum clock_timestamp(PG_FUNCTION_ARGS);
extern Datum pgsql_postmaster_start_time(PG_FUNCTION_ARGS); extern Datum pg_postmaster_start_time(PG_FUNCTION_ARGS);
extern Datum pg_conf_load_time(PG_FUNCTION_ARGS);
/* Internal routines (not fmgr-callable) */ /* Internal routines (not fmgr-callable) */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment