summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2005-06-29 22:51:57 +0000
committerTom Lane2005-06-29 22:51:57 +0000
commit8013e4e2a87c13baa834ae0fc24bd30266277c8f (patch)
treec3d0f2b452c4df5fc5dbfcadda507c9942e6522c
parent4f7685e7176b74a9d04954acb1cfc482f7a7b842 (diff)
Clean up the rather historically encumbered interface to now() and
current time: provide a GetCurrentTimestamp() function that returns current time in the form of a TimestampTz, instead of separate time_t and microseconds fields. This is what all the callers really want anyway, and it eliminates low-level dependencies on AbsoluteTime, which is a deprecated datatype that will have to disappear eventually.
-rw-r--r--contrib/btree_gist/btree_ts.c3
-rw-r--r--contrib/spi/timetravel.c2
-rw-r--r--src/backend/access/transam/xact.c33
-rw-r--r--src/backend/access/transam/xlog.c1
-rw-r--r--src/backend/bootstrap/bootparse.y1
-rw-r--r--src/backend/bootstrap/bootscanner.l1
-rw-r--r--src/backend/libpq/crypt.c10
-rw-r--r--src/backend/postmaster/pgstat.c9
-rw-r--r--src/backend/postmaster/postmaster.c18
-rw-r--r--src/backend/tcop/postgres.c13
-rw-r--r--src/backend/utils/adt/datetime.c36
-rw-r--r--src/backend/utils/adt/nabstime.c89
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c30
-rw-r--r--src/backend/utils/adt/selfuncs.c1
-rw-r--r--src/backend/utils/adt/timestamp.c44
-rw-r--r--src/include/access/xact.h5
-rw-r--r--src/include/pgstat.h8
-rw-r--r--src/include/utils/nabstime.h2
-rw-r--r--src/include/utils/timestamp.h8
19 files changed, 118 insertions, 196 deletions
diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c
index 3d5defe3db..37f72d3a51 100644
--- a/contrib/btree_gist/btree_ts.c
+++ b/contrib/btree_gist/btree_ts.c
@@ -1,6 +1,9 @@
#include "btree_gist.h"
#include "btree_utils_num.h"
+#include "utils/datetime.h"
+
+
typedef struct
{
Timestamp lower;
diff --git a/contrib/spi/timetravel.c b/contrib/spi/timetravel.c
index ba4838af65..0eae24a576 100644
--- a/contrib/spi/timetravel.c
+++ b/contrib/spi/timetravel.c
@@ -8,6 +8,8 @@
#include "executor/spi.h" /* this is what you need to work with SPI */
#include "commands/trigger.h" /* -"- and triggers */
#include "miscadmin.h" /* for GetPgUserName() */
+#include "utils/nabstime.h"
+
#include <ctype.h> /* tolower () */
#define ABSTIMEOID 702 /* it should be in pg_type.h */
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index e4c2b76185..5a98faeed2 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -168,12 +168,11 @@ static SubTransactionId currentSubTransactionId;
static CommandId currentCommandId;
/*
- * These vars hold the value of now(), ie, the transaction start time.
+ * This is the value of now(), ie, the transaction start time.
* This does not change as we enter and exit subtransactions, so we don't
* keep it inside the TransactionState stack.
*/
-static AbsoluteTime xactStartTime; /* integer part */
-static int xactStartTimeUsec; /* microsecond part */
+static TimestampTz xactStartTimestamp;
/*
* GID to be used for preparing the current transaction. This is also
@@ -420,28 +419,15 @@ GetCurrentCommandId(void)
return currentCommandId;
}
-
-/*
- * GetCurrentTransactionStartTime
- */
-AbsoluteTime
-GetCurrentTransactionStartTime(void)
-{
- return xactStartTime;
-}
-
-
/*
- * GetCurrentTransactionStartTimeUsec
+ * GetCurrentTransactionStartTimestamp
*/
-AbsoluteTime
-GetCurrentTransactionStartTimeUsec(int *msec)
+TimestampTz
+GetCurrentTransactionStartTimestamp(void)
{
- *msec = xactStartTimeUsec;
- return xactStartTime;
+ return xactStartTimestamp;
}
-
/*
* GetCurrentTransactionNestLevel
*
@@ -1391,7 +1377,7 @@ StartTransaction(void)
/*
* set now()
*/
- xactStartTime = GetCurrentAbsoluteTimeUsec(&(xactStartTimeUsec));
+ xactStartTimestamp = GetCurrentTimestamp();
/*
* initialize current transaction state fields
@@ -1633,8 +1619,6 @@ PrepareTransaction(void)
TransactionId xid = GetCurrentTransactionId();
GlobalTransaction gxact;
TimestampTz prepared_at;
- AbsoluteTime PreparedSec; /* integer part */
- int PreparedUSec; /* microsecond part */
ShowTransactionState("PrepareTransaction");
@@ -1697,8 +1681,7 @@ PrepareTransaction(void)
*/
s->state = TRANS_PREPARE;
- PreparedSec = GetCurrentAbsoluteTimeUsec(&PreparedUSec);
- prepared_at = AbsoluteTimeUsecToTimestampTz(PreparedSec, PreparedUSec);
+ prepared_at = GetCurrentTimestamp();
/* Tell bufmgr and smgr to prepare for commit */
BufmgrCommit();
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 6e4a129964..f984778452 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -43,6 +43,7 @@
#include "storage/spin.h"
#include "utils/builtins.h"
#include "utils/guc.h"
+#include "utils/nabstime.h"
#include "utils/relcache.h"
diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y
index 498e750bd6..6f68fb8dd0 100644
--- a/src/backend/bootstrap/bootparse.y
+++ b/src/backend/bootstrap/bootparse.y
@@ -47,7 +47,6 @@
#include "storage/off.h"
#include "storage/smgr.h"
#include "tcop/dest.h"
-#include "utils/nabstime.h"
#include "utils/rel.h"
#define atooid(x) ((Oid) strtoul((x), NULL, 10))
diff --git a/src/backend/bootstrap/bootscanner.l b/src/backend/bootstrap/bootscanner.l
index 8d378b0c08..b1a5fc5e44 100644
--- a/src/backend/bootstrap/bootscanner.l
+++ b/src/backend/bootstrap/bootscanner.l
@@ -34,7 +34,6 @@
#include "storage/fd.h"
#include "storage/itemptr.h"
#include "storage/off.h"
-#include "utils/nabstime.h"
#include "utils/rel.h"
/* Not needed now that this file is compiled as part of bootparse. */
diff --git a/src/backend/libpq/crypt.c b/src/backend/libpq/crypt.c
index 9c67589549..54ec7bdfa9 100644
--- a/src/backend/libpq/crypt.c
+++ b/src/backend/libpq/crypt.c
@@ -25,7 +25,7 @@
#include "miscadmin.h"
#include "storage/fd.h"
#include "nodes/pg_list.h"
-#include "utils/nabstime.h"
+#include "utils/timestamp.h"
int
@@ -149,19 +149,13 @@ md5_crypt_verify(const Port *port, const char *role, char *client_pass)
else
{
TimestampTz vuntil;
- AbsoluteTime sec;
- int usec;
- TimestampTz curtime;
vuntil = DatumGetTimestampTz(DirectFunctionCall3(timestamptz_in,
CStringGetDatum(valuntil),
ObjectIdGetDatum(InvalidOid),
Int32GetDatum(-1)));
- sec = GetCurrentAbsoluteTimeUsec(&usec);
- curtime = AbsoluteTimeUsecToTimestampTz(sec, usec);
-
- if (vuntil < curtime)
+ if (vuntil < GetCurrentTimestamp())
retval = STATUS_ERROR;
else
retval = STATUS_OK;
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c
index cc969e27d2..817b6267be 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -2026,10 +2026,8 @@ pgstat_add_backend(PgStat_MsgHdr *msg)
/* Put this new backend into the slot */
beentry->procpid = msg->m_procpid;
- beentry->start_sec =
- GetCurrentAbsoluteTimeUsec(&beentry->start_usec);
- beentry->activity_start_sec = 0;
- beentry->activity_start_usec = 0;
+ beentry->start_timestamp = GetCurrentTimestamp();
+ beentry->activity_start_timestamp = 0;
beentry->activity[0] = '\0';
/*
@@ -2665,8 +2663,7 @@ pgstat_recv_activity(PgStat_MsgActivity *msg, int len)
StrNCpy(entry->activity, msg->m_what, PGSTAT_ACTIVITY_SIZE);
- entry->activity_start_sec =
- GetCurrentAbsoluteTimeUsec(&entry->activity_start_usec);
+ entry->activity_start_timestamp = GetCurrentTimestamp();
}
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 2683af10f6..479001ea59 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -118,6 +118,7 @@
#include "storage/proc.h"
#include "tcop/tcopprot.h"
#include "utils/builtins.h"
+#include "utils/datetime.h"
#include "utils/guc.h"
#include "utils/memutils.h"
#include "utils/ps_status.h"
@@ -222,9 +223,6 @@ static bool FatalError = false; /* T if recovering from backend crash */
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
@@ -333,7 +331,7 @@ typedef struct
InheritableSocket pgStatPipe0;
InheritableSocket pgStatPipe1;
pid_t PostmasterPid;
- TimestampTz StartTime;
+ TimestampTz PgStartTime;
#ifdef WIN32
HANDLE PostmasterHandle;
HANDLE initial_signal_pipe;
@@ -376,9 +374,6 @@ PostmasterMain(int argc, char *argv[])
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]);
@@ -922,10 +917,9 @@ PostmasterMain(int argc, char *argv[])
StartupPID = StartupDataBase();
/*
- * Get start up time
+ * Remember postmaster startup time
*/
- StartTimeSec = GetCurrentAbsoluteTimeUsec(&StartTimeUSec);
- StartTime = AbsoluteTimeUsecToTimestampTz(StartTimeSec, StartTimeUSec);
+ PgStartTime = GetCurrentTimestamp();
status = ServerLoop();
@@ -3613,7 +3607,7 @@ save_backend_variables(BackendParameters *param, Port *port,
write_inheritable_socket(&param->pgStatPipe1, pgStatPipe[1], childPid);
param->PostmasterPid = PostmasterPid;
- param->StartTime = StartTime;
+ param->PgStartTime = PgStartTime;
#ifdef WIN32
param->PostmasterHandle = PostmasterHandle;
@@ -3816,7 +3810,7 @@ restore_backend_variables(BackendParameters *param, Port *port)
read_inheritable_socket(&pgStatPipe[1], &param->pgStatPipe1);
PostmasterPid = param->PostmasterPid;
- StartTime = param->StartTime;
+ PgStartTime = param->PgStartTime;
#ifdef WIN32
PostmasterHandle = param->PostmasterHandle;
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index aeffab3cee..15b1b77cf2 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -149,9 +149,6 @@ static int UseNewLine = 0; /* Use EOF as query delimiters */
#endif /* TCOP_DONTUSENEWLINE */
-/* Backend startup time */
-TimestampTz StartTime;
-
/* ----------------------------------------------------------------
* decls for routines only used in this file
* ----------------------------------------------------------------
@@ -2373,9 +2370,6 @@ PostgresMain(int argc, char *argv[], const char *username)
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)))
@@ -2966,13 +2960,10 @@ PostgresMain(int argc, char *argv[], const char *username)
pgstat_bestart();
/*
- * Get stand-alone backend startup time
+ * Remember stand-alone backend startup time
*/
if (!IsUnderPostmaster)
- {
- StartTimeSec = GetCurrentAbsoluteTimeUsec(&StartTimeUSec);
- StartTime = AbsoluteTimeUsecToTimestampTz(StartTimeSec, StartTimeUSec);
- }
+ PgStartTime = GetCurrentTimestamp();
/*
* POSTGRES main processing loop begins here
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index be473b316f..88e968a63f 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -20,6 +20,7 @@
#include <limits.h>
#include <math.h>
+#include "access/xact.h"
#include "miscadmin.h"
#include "utils/datetime.h"
#include "utils/guc.h"
@@ -674,6 +675,41 @@ j2day(int date)
} /* j2day() */
+/*
+ * GetCurrentDateTime()
+ *
+ * Get the transaction start time ("now()") broken down as a struct pg_tm.
+ */
+void
+GetCurrentDateTime(struct pg_tm * tm)
+{
+ int tz;
+ fsec_t fsec;
+
+ timestamp2tm(GetCurrentTransactionStartTimestamp(), &tz, tm, &fsec,
+ NULL, NULL);
+ /* Note: don't pass NULL tzp to timestamp2tm; affects behavior */
+}
+
+/*
+ * GetCurrentTimeUsec()
+ *
+ * Get the transaction start time ("now()") broken down as a struct pg_tm,
+ * including fractional seconds and timezone offset.
+ */
+void
+GetCurrentTimeUsec(struct pg_tm * tm, fsec_t *fsec, int *tzp)
+{
+ int tz;
+
+ timestamp2tm(GetCurrentTransactionStartTimestamp(), &tz, tm, fsec,
+ NULL, NULL);
+ /* Note: don't pass NULL tzp to timestamp2tm; affects behavior */
+ if (tzp != NULL)
+ *tzp = tz;
+}
+
+
/* TrimTrailingZeros()
* ... resulting from printing numbers with full precision.
*/
diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c
index f94af3f9a2..c8fd7dc979 100644
--- a/src/backend/utils/adt/nabstime.c
+++ b/src/backend/utils/adt/nabstime.c
@@ -27,7 +27,7 @@
#include "miscadmin.h"
#include "pgtime.h"
#include "utils/builtins.h"
-#include "utils/timestamp.h"
+#include "utils/nabstime.h"
#define MIN_DAYNUM -24856 /* December 13, 1901 */
#define MAX_DAYNUM 24854 /* January 18, 2038 */
@@ -99,84 +99,6 @@ GetCurrentAbsoluteTime(void)
}
-/*
- * GetCurrentAbsoluteTimeUsec()
- *
- * Get the current system time (relative to Unix epoch), including fractional
- * seconds expressed as microseconds.
- */
-AbsoluteTime
-GetCurrentAbsoluteTimeUsec(int *usec)
-{
- time_t now;
- struct timeval tp;
-
- gettimeofday(&tp, NULL);
- now = tp.tv_sec;
- *usec = tp.tv_usec;
- return (AbsoluteTime) now;
-}
-
-
-/*
- * AbsoluteTimeUsecToTimestampTz()
- *
- * Convert system time including microseconds to TimestampTz representation.
- */
-TimestampTz
-AbsoluteTimeUsecToTimestampTz(AbsoluteTime sec, int usec)
-{
- TimestampTz result;
-
-#ifdef HAVE_INT64_TIMESTAMP
- result = ((sec - ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY))
- * USECS_PER_SEC) + usec;
-#else
- result = sec - ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY)
- + (usec / 1000000.0);
-#endif
-
- return result;
-}
-
-
-/*
- * GetCurrentDateTime()
- *
- * Get the transaction start time ("now()") broken down as a struct pg_tm.
- */
-void
-GetCurrentDateTime(struct pg_tm * tm)
-{
- int tz;
-
- abstime2tm(GetCurrentTransactionStartTime(), &tz, tm, NULL);
-}
-
-/*
- * GetCurrentTimeUsec()
- *
- * Get the transaction start time ("now()") broken down as a struct pg_tm,
- * including fractional seconds and timezone offset.
- */
-void
-GetCurrentTimeUsec(struct pg_tm * tm, fsec_t *fsec, int *tzp)
-{
- int tz;
- int usec;
-
- abstime2tm(GetCurrentTransactionStartTimeUsec(&usec), &tz, tm, NULL);
- /* Note: don't pass NULL tzp to abstime2tm; affects behavior */
- if (tzp != NULL)
- *tzp = tz;
-#ifdef HAVE_INT64_TIMESTAMP
- *fsec = usec;
-#else
- *fsec = usec / 1000000.0;
-#endif
-}
-
-
void
abstime2tm(AbsoluteTime _time, int *tzp, struct pg_tm * tm, char **tzn)
{
@@ -458,15 +380,6 @@ abstime_cmp_internal(AbsoluteTime a, AbsoluteTime b)
if (b == INVALID_ABSTIME)
return -1; /* non-INVALID < INVALID */
-#if 0
- /* CURRENT is no longer stored internally... */
- /* XXX this is broken, should go away: */
- if (a == CURRENT_ABSTIME)
- a = GetCurrentTransactionStartTime();
- if (b == CURRENT_ABSTIME)
- b = GetCurrentTransactionStartTime();
-#endif
-
if (a > b)
return 1;
else if (a == b)
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index 271e0ace90..8568dbc588 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -341,13 +341,9 @@ pg_stat_get_backend_activity(PG_FUNCTION_ARGS)
Datum
pg_stat_get_backend_activity_start(PG_FUNCTION_ARGS)
{
- PgStat_StatBeEntry *beentry;
- int32 beid;
- AbsoluteTime sec;
- int usec;
+ int32 beid = PG_GETARG_INT32(0);
TimestampTz result;
-
- beid = PG_GETARG_INT32(0);
+ PgStat_StatBeEntry *beentry;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
@@ -355,31 +351,24 @@ pg_stat_get_backend_activity_start(PG_FUNCTION_ARGS)
if (!superuser() && beentry->userid != GetUserId())
PG_RETURN_NULL();
- sec = beentry->activity_start_sec;
- usec = beentry->activity_start_usec;
+ result = beentry->activity_start_timestamp;
/*
* No time recorded for start of current query -- this is the case if
* the user hasn't enabled query-level stats collection.
*/
- if (sec == 0 && usec == 0)
+ if (result == 0)
PG_RETURN_NULL();
- result = AbsoluteTimeUsecToTimestampTz(sec, usec);
-
PG_RETURN_TIMESTAMPTZ(result);
}
Datum
pg_stat_get_backend_start(PG_FUNCTION_ARGS)
{
- PgStat_StatBeEntry *beentry;
- int32 beid;
- AbsoluteTime sec;
- int usec;
+ int32 beid = PG_GETARG_INT32(0);
TimestampTz result;
-
- beid = PG_GETARG_INT32(0);
+ PgStat_StatBeEntry *beentry;
if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL)
PG_RETURN_NULL();
@@ -387,14 +376,11 @@ pg_stat_get_backend_start(PG_FUNCTION_ARGS)
if (!superuser() && beentry->userid != GetUserId())
PG_RETURN_NULL();
- sec = beentry->start_sec;
- usec = beentry->start_usec;
+ result = beentry->start_timestamp;
- if (sec == 0 && usec == 0)
+ if (result == 0) /* probably can't happen? */
PG_RETURN_NULL();
- result = AbsoluteTimeUsecToTimestampTz(sec, usec);
-
PG_RETURN_TIMESTAMPTZ(result);
}
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 09ca63619e..d9170ddaf0 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -105,6 +105,7 @@
#include "utils/datum.h"
#include "utils/int8.h"
#include "utils/lsyscache.h"
+#include "utils/nabstime.h"
#include "utils/pg_locale.h"
#include "utils/selfuncs.h"
#include "utils/syscache.h"
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index f594372a29..0d52f83b1a 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -28,6 +28,8 @@
#include "parser/scansup.h"
#include "utils/array.h"
#include "utils/builtins.h"
+#include "utils/datetime.h"
+
/*
* gcc's -ffast-math switch breaks routines that expect exact results from
@@ -38,6 +40,10 @@
#endif
+/* Set at postmaster start */
+TimestampTz PgStartTime;
+
+
#ifdef HAVE_INT64_TIMESTAMP
static int64 time2t(const int hour, const int min, const int sec, const fsec_t fsec);
@@ -927,21 +933,39 @@ EncodeSpecialTimestamp(Timestamp dt, char *str)
Datum
now(PG_FUNCTION_ARGS)
{
- TimestampTz result;
- AbsoluteTime sec;
- int usec;
-
- sec = GetCurrentTransactionStartTimeUsec(&usec);
-
- result = AbsoluteTimeUsecToTimestampTz(sec, usec);
-
- PG_RETURN_TIMESTAMPTZ(result);
+ PG_RETURN_TIMESTAMPTZ(GetCurrentTransactionStartTimestamp());
}
Datum
pgsql_postmaster_start_time(PG_FUNCTION_ARGS)
{
- PG_RETURN_TIMESTAMPTZ(StartTime);
+ PG_RETURN_TIMESTAMPTZ(PgStartTime);
+}
+
+/*
+ * GetCurrentTimestamp -- get the current operating system time
+ *
+ * Result is in the form of a TimestampTz value, and is expressed to the
+ * full precision of the gettimeofday() syscall
+ */
+TimestampTz
+GetCurrentTimestamp(void)
+{
+ TimestampTz result;
+ struct timeval tp;
+
+ gettimeofday(&tp, NULL);
+
+ result = tp.tv_sec -
+ ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY);
+
+#ifdef HAVE_INT64_TIMESTAMP
+ result = (result * USECS_PER_SEC) + tp.tv_usec;
+#else
+ result = result + (tp.tv_usec / 1000000.0);
+#endif
+
+ return result;
}
void
diff --git a/src/include/access/xact.h b/src/include/access/xact.h
index 58d7ceb174..1995defeed 100644
--- a/src/include/access/xact.h
+++ b/src/include/access/xact.h
@@ -17,7 +17,7 @@
#include "access/xlog.h"
#include "storage/relfilenode.h"
#include "nodes/pg_list.h"
-#include "utils/nabstime.h"
+#include "utils/timestamp.h"
/*
@@ -140,8 +140,7 @@ extern TransactionId GetCurrentTransactionId(void);
extern TransactionId GetCurrentTransactionIdIfAny(void);
extern SubTransactionId GetCurrentSubTransactionId(void);
extern CommandId GetCurrentCommandId(void);
-extern AbsoluteTime GetCurrentTransactionStartTime(void);
-extern AbsoluteTime GetCurrentTransactionStartTimeUsec(int *usec);
+extern TimestampTz GetCurrentTransactionStartTimestamp(void);
extern int GetCurrentTransactionNestLevel(void);
extern bool TransactionIdIsCurrentTransactionId(TransactionId xid);
extern void CommandCounterIncrement(void);
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index 21c192f323..ea1145dbab 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -13,8 +13,8 @@
#include "libpq/pqcomm.h"
#include "utils/hsearch.h"
-#include "utils/nabstime.h"
#include "utils/rel.h"
+#include "utils/timestamp.h"
/* ----------
* The types of backend/postmaster -> collector messages
@@ -233,10 +233,8 @@ typedef struct PgStat_StatBeEntry
{
/* An entry is non-empty iff procpid > 0 */
int procpid;
- AbsoluteTime start_sec;
- int start_usec;
- AbsoluteTime activity_start_sec;
- int activity_start_usec;
+ TimestampTz start_timestamp;
+ TimestampTz activity_start_timestamp;
char activity[PGSTAT_ACTIVITY_SIZE];
/*
diff --git a/src/include/utils/nabstime.h b/src/include/utils/nabstime.h
index f8f6fbe5a9..b0d7021ecb 100644
--- a/src/include/utils/nabstime.h
+++ b/src/include/utils/nabstime.h
@@ -162,8 +162,6 @@ extern Datum timeofday(PG_FUNCTION_ARGS);
/* non-fmgr-callable support routines */
extern AbsoluteTime GetCurrentAbsoluteTime(void);
-extern AbsoluteTime GetCurrentAbsoluteTimeUsec(int *usec);
-extern TimestampTz AbsoluteTimeUsecToTimestampTz(AbsoluteTime sec, int usec);
extern void abstime2tm(AbsoluteTime time, int *tzp, struct pg_tm * tm, char **tzn);
#endif /* NABSTIME_H */
diff --git a/src/include/utils/timestamp.h b/src/include/utils/timestamp.h
index 7acc71aea6..252cf0fa51 100644
--- a/src/include/utils/timestamp.h
+++ b/src/include/utils/timestamp.h
@@ -156,6 +156,10 @@ typedef double fsec_t;
#define INTERVAL_RANGE(t) (((t) >> 16) & INTERVAL_RANGE_MASK)
+/* Set at postmaster start */
+extern TimestampTz PgStartTime;
+
+
/*
* timestamp.c prototypes
*/
@@ -258,10 +262,10 @@ extern Datum now(PG_FUNCTION_ARGS);
extern Datum pgsql_postmaster_start_time(PG_FUNCTION_ARGS);
-extern TimestampTz StartTime;
-
/* Internal routines (not fmgr-callable) */
+extern TimestampTz GetCurrentTimestamp(void);
+
extern int tm2timestamp(struct pg_tm * tm, fsec_t fsec, int *tzp, Timestamp *dt);
extern int timestamp2tm(Timestamp dt, int *tzp, struct pg_tm * tm,
fsec_t *fsec, char **tzn, pg_tz *attimezone);