PostgreSQL Source Code  git master
timestamp.h File Reference
#include "datatype/timestamp.h"
#include "fmgr.h"
#include "pgtime.h"
Include dependency graph for timestamp.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define PG_GETARG_TIMESTAMP(n)   DatumGetTimestamp(PG_GETARG_DATUM(n))
 
#define PG_GETARG_TIMESTAMPTZ(n)   DatumGetTimestampTz(PG_GETARG_DATUM(n))
 
#define PG_GETARG_INTERVAL_P(n)   DatumGetIntervalP(PG_GETARG_DATUM(n))
 
#define PG_RETURN_TIMESTAMP(x)   return TimestampGetDatum(x)
 
#define PG_RETURN_TIMESTAMPTZ(x)   return TimestampTzGetDatum(x)
 
#define PG_RETURN_INTERVAL_P(x)   return IntervalPGetDatum(x)
 
#define TIMESTAMP_MASK(b)   (1 << (b))
 
#define INTERVAL_MASK(b)   (1 << (b))
 
#define INTERVAL_FULL_RANGE   (0x7FFF)
 
#define INTERVAL_RANGE_MASK   (0x7FFF)
 
#define INTERVAL_FULL_PRECISION   (0xFFFF)
 
#define INTERVAL_PRECISION_MASK   (0xFFFF)
 
#define INTERVAL_TYPMOD(p, r)   ((((r) & INTERVAL_RANGE_MASK) << 16) | ((p) & INTERVAL_PRECISION_MASK))
 
#define INTERVAL_PRECISION(t)   ((t) & INTERVAL_PRECISION_MASK)
 
#define INTERVAL_RANGE(t)   (((t) >> 16) & INTERVAL_RANGE_MASK)
 
#define TimestampTzPlusMilliseconds(tz, ms)   ((tz) + ((ms) * (int64) 1000))
 
#define TimestampTzPlusSeconds(tz, s)   ((tz) + ((s) * (int64) 1000000))
 
#define timestamptz_cmp_internal(dt1, dt2)   timestamp_cmp_internal(dt1, dt2)
 

Functions

static Timestamp DatumGetTimestamp (Datum X)
 
static TimestampTz DatumGetTimestampTz (Datum X)
 
static IntervalDatumGetIntervalP (Datum X)
 
static Datum TimestampGetDatum (Timestamp X)
 
static Datum TimestampTzGetDatum (TimestampTz X)
 
static Datum IntervalPGetDatum (const Interval *X)
 
int32 anytimestamp_typmod_check (bool istz, int32 typmod)
 
TimestampTz GetCurrentTimestamp (void)
 
TimestampTz GetSQLCurrentTimestamp (int32 typmod)
 
Timestamp GetSQLLocalTimestamp (int32 typmod)
 
void TimestampDifference (TimestampTz start_time, TimestampTz stop_time, long *secs, int *microsecs)
 
long TimestampDifferenceMilliseconds (TimestampTz start_time, TimestampTz stop_time)
 
bool TimestampDifferenceExceeds (TimestampTz start_time, TimestampTz stop_time, int msec)
 
TimestampTz time_t_to_timestamptz (pg_time_t tm)
 
pg_time_t timestamptz_to_time_t (TimestampTz t)
 
const char * timestamptz_to_str (TimestampTz t)
 
int tm2timestamp (struct pg_tm *tm, fsec_t fsec, int *tzp, Timestamp *result)
 
int timestamp2tm (Timestamp dt, int *tzp, struct pg_tm *tm, fsec_t *fsec, const char **tzn, pg_tz *attimezone)
 
void dt2time (Timestamp jd, int *hour, int *min, int *sec, fsec_t *fsec)
 
void interval2itm (Interval span, struct pg_itm *itm)
 
int itm2interval (struct pg_itm *itm, Interval *span)
 
int itmin2interval (struct pg_itm_in *itm_in, Interval *span)
 
Timestamp SetEpochTimestamp (void)
 
void GetEpochTime (struct pg_tm *tm)
 
int timestamp_cmp_internal (Timestamp dt1, Timestamp dt2)
 
TimestampTz timestamp2timestamptz_opt_overflow (Timestamp timestamp, int *overflow)
 
int32 timestamp_cmp_timestamptz_internal (Timestamp timestampVal, TimestampTz dt2)
 
int isoweek2j (int year, int week)
 
void isoweek2date (int woy, int *year, int *mon, int *mday)
 
void isoweekdate2date (int isoweek, int wday, int *year, int *mon, int *mday)
 
int date2isoweek (int year, int mon, int mday)
 
int date2isoyear (int year, int mon, int mday)
 
int date2isoyearday (int year, int mon, int mday)
 
bool TimestampTimestampTzRequiresRewrite (void)
 

Variables

PGDLLIMPORT TimestampTz PgStartTime
 
PGDLLIMPORT TimestampTz PgReloadTime
 

Macro Definition Documentation

◆ INTERVAL_FULL_PRECISION

#define INTERVAL_FULL_PRECISION   (0xFFFF)

Definition at line 78 of file timestamp.h.

◆ INTERVAL_FULL_RANGE

#define INTERVAL_FULL_RANGE   (0x7FFF)

Definition at line 76 of file timestamp.h.

◆ INTERVAL_MASK

#define INTERVAL_MASK (   b)    (1 << (b))

Definition at line 73 of file timestamp.h.

◆ INTERVAL_PRECISION

#define INTERVAL_PRECISION (   t)    ((t) & INTERVAL_PRECISION_MASK)

Definition at line 81 of file timestamp.h.

◆ INTERVAL_PRECISION_MASK

#define INTERVAL_PRECISION_MASK   (0xFFFF)

Definition at line 79 of file timestamp.h.

◆ INTERVAL_RANGE

#define INTERVAL_RANGE (   t)    (((t) >> 16) & INTERVAL_RANGE_MASK)

Definition at line 82 of file timestamp.h.

◆ INTERVAL_RANGE_MASK

#define INTERVAL_RANGE_MASK   (0x7FFF)

Definition at line 77 of file timestamp.h.

◆ INTERVAL_TYPMOD

#define INTERVAL_TYPMOD (   p,
 
)    ((((r) & INTERVAL_RANGE_MASK) << 16) | ((p) & INTERVAL_PRECISION_MASK))

Definition at line 80 of file timestamp.h.

◆ PG_GETARG_INTERVAL_P

#define PG_GETARG_INTERVAL_P (   n)    DatumGetIntervalP(PG_GETARG_DATUM(n))

Definition at line 65 of file timestamp.h.

◆ PG_GETARG_TIMESTAMP

#define PG_GETARG_TIMESTAMP (   n)    DatumGetTimestamp(PG_GETARG_DATUM(n))

Definition at line 63 of file timestamp.h.

◆ PG_GETARG_TIMESTAMPTZ

#define PG_GETARG_TIMESTAMPTZ (   n)    DatumGetTimestampTz(PG_GETARG_DATUM(n))

Definition at line 64 of file timestamp.h.

◆ PG_RETURN_INTERVAL_P

#define PG_RETURN_INTERVAL_P (   x)    return IntervalPGetDatum(x)

Definition at line 69 of file timestamp.h.

◆ PG_RETURN_TIMESTAMP

#define PG_RETURN_TIMESTAMP (   x)    return TimestampGetDatum(x)

Definition at line 67 of file timestamp.h.

◆ PG_RETURN_TIMESTAMPTZ

#define PG_RETURN_TIMESTAMPTZ (   x)    return TimestampTzGetDatum(x)

Definition at line 68 of file timestamp.h.

◆ TIMESTAMP_MASK

#define TIMESTAMP_MASK (   b)    (1 << (b))

Definition at line 72 of file timestamp.h.

◆ timestamptz_cmp_internal

#define timestamptz_cmp_internal (   dt1,
  dt2 
)    timestamp_cmp_internal(dt1, dt2)

Definition at line 131 of file timestamp.h.

◆ TimestampTzPlusMilliseconds

#define TimestampTzPlusMilliseconds (   tz,
  ms 
)    ((tz) + ((ms) * (int64) 1000))

Definition at line 85 of file timestamp.h.

◆ TimestampTzPlusSeconds

#define TimestampTzPlusSeconds (   tz,
 
)    ((tz) + ((s) * (int64) 1000000))

Definition at line 86 of file timestamp.h.

Function Documentation

◆ anytimestamp_typmod_check()

int32 anytimestamp_typmod_check ( bool  istz,
int32  typmod 
)

Definition at line 123 of file timestamp.c.

124 {
125  if (typmod < 0)
126  ereport(ERROR,
127  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
128  errmsg("TIMESTAMP(%d)%s precision must not be negative",
129  typmod, (istz ? " WITH TIME ZONE" : ""))));
130  if (typmod > MAX_TIMESTAMP_PRECISION)
131  {
133  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
134  errmsg("TIMESTAMP(%d)%s precision reduced to maximum allowed, %d",
135  typmod, (istz ? " WITH TIME ZONE" : ""),
137  typmod = MAX_TIMESTAMP_PRECISION;
138  }
139 
140  return typmod;
141 }
#define MAX_TIMESTAMP_PRECISION
Definition: timestamp.h:92
int errcode(int sqlerrcode)
Definition: elog.c:859
int errmsg(const char *fmt,...)
Definition: elog.c:1072
#define WARNING
Definition: elog.h:36
#define ERROR
Definition: elog.h:39
#define ereport(elevel,...)
Definition: elog.h:149

References ereport, errcode(), errmsg(), ERROR, MAX_TIMESTAMP_PRECISION, and WARNING.

Referenced by anytimestamp_typmodin(), executeDateTimeMethod(), and transformSQLValueFunction().

◆ date2isoweek()

int date2isoweek ( int  year,
int  mon,
int  mday 
)

Definition at line 5155 of file timestamp.c.

5156 {
5157  float8 result;
5158  int day0,
5159  day4,
5160  dayn;
5161 
5162  /* current day */
5163  dayn = date2j(year, mon, mday);
5164 
5165  /* fourth day of current year */
5166  day4 = date2j(year, 1, 4);
5167 
5168  /* day0 == offset to first day of week (Monday) */
5169  day0 = j2day(day4 - 1);
5170 
5171  /*
5172  * We need the first week containing a Thursday, otherwise this day falls
5173  * into the previous year for purposes of counting weeks
5174  */
5175  if (dayn < day4 - day0)
5176  {
5177  day4 = date2j(year - 1, 1, 4);
5178 
5179  /* day0 == offset to first day of week (Monday) */
5180  day0 = j2day(day4 - 1);
5181  }
5182 
5183  result = (dayn - (day4 - day0)) / 7 + 1;
5184 
5185  /*
5186  * Sometimes the last few days in a year will fall into the first week of
5187  * the next year, so check for this.
5188  */
5189  if (result >= 52)
5190  {
5191  day4 = date2j(year + 1, 1, 4);
5192 
5193  /* day0 == offset to first day of week (Monday) */
5194  day0 = j2day(day4 - 1);
5195 
5196  if (dayn >= day4 - day0)
5197  result = (dayn - (day4 - day0)) / 7 + 1;
5198  }
5199 
5200  return (int) result;
5201 }
int j2day(int date)
Definition: datetime.c:344
int date2j(int year, int month, int day)
Definition: datetime.c:286
double float8
Definition: c.h:630

References date2j(), and j2day().

Referenced by DCH_to_char(), extract_date(), timestamp_part_common(), timestamp_trunc(), timestamptz_part_common(), and timestamptz_trunc_internal().

◆ date2isoyear()

int date2isoyear ( int  year,
int  mon,
int  mday 
)

Definition at line 5210 of file timestamp.c.

5211 {
5212  float8 result;
5213  int day0,
5214  day4,
5215  dayn;
5216 
5217  /* current day */
5218  dayn = date2j(year, mon, mday);
5219 
5220  /* fourth day of current year */
5221  day4 = date2j(year, 1, 4);
5222 
5223  /* day0 == offset to first day of week (Monday) */
5224  day0 = j2day(day4 - 1);
5225 
5226  /*
5227  * We need the first week containing a Thursday, otherwise this day falls
5228  * into the previous year for purposes of counting weeks
5229  */
5230  if (dayn < day4 - day0)
5231  {
5232  day4 = date2j(year - 1, 1, 4);
5233 
5234  /* day0 == offset to first day of week (Monday) */
5235  day0 = j2day(day4 - 1);
5236 
5237  year--;
5238  }
5239 
5240  result = (dayn - (day4 - day0)) / 7 + 1;
5241 
5242  /*
5243  * Sometimes the last few days in a year will fall into the first week of
5244  * the next year, so check for this.
5245  */
5246  if (result >= 52)
5247  {
5248  day4 = date2j(year + 1, 1, 4);
5249 
5250  /* day0 == offset to first day of week (Monday) */
5251  day0 = j2day(day4 - 1);
5252 
5253  if (dayn >= day4 - day0)
5254  year++;
5255  }
5256 
5257  return year;
5258 }

References date2j(), and j2day().

Referenced by date2isoyearday(), DCH_to_char(), extract_date(), timestamp_part_common(), and timestamptz_part_common().

◆ date2isoyearday()

int date2isoyearday ( int  year,
int  mon,
int  mday 
)

Definition at line 5267 of file timestamp.c.

5268 {
5269  return date2j(year, mon, mday) - isoweek2j(date2isoyear(year, mon, mday), 1) + 1;
5270 }
int isoweek2j(int year, int week)
Definition: timestamp.c:5104
int date2isoyear(int year, int mon, int mday)
Definition: timestamp.c:5210

References date2isoyear(), date2j(), and isoweek2j().

Referenced by DCH_to_char().

◆ DatumGetIntervalP()

static Interval* DatumGetIntervalP ( Datum  X)
inlinestatic

◆ DatumGetTimestamp()

static Timestamp DatumGetTimestamp ( Datum  X)
inlinestatic

◆ DatumGetTimestampTz()

static TimestampTz DatumGetTimestampTz ( Datum  X)
inlinestatic

◆ dt2time()

void dt2time ( Timestamp  jd,
int *  hour,
int *  min,
int *  sec,
fsec_t fsec 
)

Definition at line 1874 of file timestamp.c.

1875 {
1876  TimeOffset time;
1877 
1878  time = jd;
1879 
1880  *hour = time / USECS_PER_HOUR;
1881  time -= (*hour) * USECS_PER_HOUR;
1882  *min = time / USECS_PER_MINUTE;
1883  time -= (*min) * USECS_PER_MINUTE;
1884  *sec = time / USECS_PER_SEC;
1885  *fsec = time - (*sec * USECS_PER_SEC);
1886 } /* dt2time() */
#define USECS_PER_HOUR
Definition: timestamp.h:132
#define USECS_PER_SEC
Definition: timestamp.h:134
#define USECS_PER_MINUTE
Definition: timestamp.h:133
int64 TimeOffset
Definition: timestamp.h:40

References USECS_PER_HOUR, USECS_PER_MINUTE, and USECS_PER_SEC.

Referenced by DecodeDateTime(), DecodeTimeOnly(), and timestamp2tm().

◆ GetCurrentTimestamp()

TimestampTz GetCurrentTimestamp ( void  )

Definition at line 1654 of file timestamp.c.

1655 {
1656  TimestampTz result;
1657  struct timeval tp;
1658 
1659  gettimeofday(&tp, NULL);
1660 
1661  result = (TimestampTz) tp.tv_sec -
1663  result = (result * USECS_PER_SEC) + tp.tv_usec;
1664 
1665  return result;
1666 }
#define UNIX_EPOCH_JDATE
Definition: timestamp.h:234
#define SECS_PER_DAY
Definition: timestamp.h:126
#define POSTGRES_EPOCH_JDATE
Definition: timestamp.h:235
int gettimeofday(struct timeval *tp, void *tzp)

References gettimeofday(), POSTGRES_EPOCH_JDATE, SECS_PER_DAY, UNIX_EPOCH_JDATE, and USECS_PER_SEC.

Referenced by ApplyLauncherMain(), asyncQueueFillWarning(), autoprewarm_main(), BackgroundWriterMain(), bbsink_copystream_archive_contents(), bbsink_copystream_end_archive(), bbsink_copystream_new(), bbsink_throttle_begin_backup(), check_log_duration(), CheckPointGuts(), CleanupBackgroundWorker(), clock_timestamp(), CreateCheckPoint(), CreateEndOfRecoveryRecord(), CreateOverwriteContrecordRecord(), CreateRestartPoint(), dblink_cancel_query(), DetermineSleepTime(), disable_timeout(), disable_timeouts(), do_analyze_rel(), do_start_bgworker(), do_start_worker(), enable_startup_progress_timeout(), enable_timeout_after(), enable_timeout_at(), enable_timeout_every(), enable_timeouts(), entry_alloc(), entry_reset(), get_role_password(), GetCurrentTransactionStopTimestamp(), GetReplicationApplyDelay(), handle_sig_alarm(), has_startup_progress_timeout_expired(), heap_vacuum_rel(), initialize_prng(), InitProcessGlobals(), KnownAssignedXidsCompress(), launcher_determine_sleep(), libpqsrv_cancel(), LockBufferForCleanup(), log_disconnections(), LogCheckpointEnd(), logicalrep_worker_launch(), LogicalRepApplyLoop(), maybe_start_bgworkers(), pa_send_data(), PerformWalRecovery(), pgfdw_abort_cleanup_begin(), pgfdw_cancel_query(), pgfdw_exec_cleanup_query(), pgfdw_finish_abort_cleanup(), pgfdw_get_cleanup_result(), pgss_shmem_startup(), pgstat_build_snapshot(), pgstat_report_activity(), pgstat_report_analyze(), pgstat_report_archiver(), pgstat_report_autovac(), pgstat_report_checksum_failures_in_db(), pgstat_report_stat(), pgstat_report_vacuum(), pgstat_reset(), pgstat_reset_after_failure(), pgstat_reset_counters(), pgstat_reset_of_kind(), pgstat_reset_slru(), PostgresSingleUserMain(), PostmasterMain(), PrepareForIncrementalBackup(), PrepareTransaction(), process_syncing_tables_for_apply(), ProcessConfigFileInternal(), ProcessPendingWrites(), ProcessRepliesIfAny(), ProcessStandbyReplyMessage(), ProcessWalSndrMessage(), ProcSleep(), rebuild_database_list(), RecordTransactionAbort(), RecordTransactionAbortPrepared(), RecordTransactionCommitPrepared(), recoveryApplyDelay(), ReplicationSlotRelease(), reschedule_timeouts(), ResolveRecoveryConflictWithBufferPin(), ResolveRecoveryConflictWithLock(), ResolveRecoveryConflictWithVirtualXIDs(), RestoreSlotFromDisk(), send_feedback(), SetCurrentStatementStartTimestamp(), SetupApplyOrSyncWorker(), StartTransaction(), test_pattern(), test_random(), throttle(), update_synced_slots_inactive_since(), UpdateWorkerStats(), WaitExceedsMaxStandbyDelay(), WaitForWalSummarization(), WaitForWALToBecomeAvailable(), WalReceiverMain(), WalSndKeepalive(), WalSndLoop(), WalSndUpdateProgress(), WalSndWaitForWal(), WalSndWriteData(), XLogBackgroundFlush(), XLogFileRead(), XLogPrefetchResetStats(), XLogPrefetchShmemInit(), XLogRestorePoint(), XLogSendPhysical(), XLogWalRcvSendHSFeedback(), and XLogWalRcvSendReply().

◆ GetEpochTime()

void GetEpochTime ( struct pg_tm tm)

Definition at line 2168 of file timestamp.c.

2169 {
2170  struct pg_tm *t0;
2171  pg_time_t epoch = 0;
2172 
2173  t0 = pg_gmtime(&epoch);
2174 
2175  if (t0 == NULL)
2176  elog(ERROR, "could not convert epoch to timestamp: %m");
2177 
2178  tm->tm_year = t0->tm_year;
2179  tm->tm_mon = t0->tm_mon;
2180  tm->tm_mday = t0->tm_mday;
2181  tm->tm_hour = t0->tm_hour;
2182  tm->tm_min = t0->tm_min;
2183  tm->tm_sec = t0->tm_sec;
2184 
2185  tm->tm_year += 1900;
2186  tm->tm_mon++;
2187 }
#define elog(elevel,...)
Definition: elog.h:224
static struct pg_tm tm
Definition: localtime.c:104
struct pg_tm * pg_gmtime(const pg_time_t *timep)
Definition: localtime.c:1389
int64 pg_time_t
Definition: pgtime.h:23
Definition: pgtime.h:35
int tm_hour
Definition: pgtime.h:38
int tm_mday
Definition: pgtime.h:39
int tm_mon
Definition: pgtime.h:40
int tm_min
Definition: pgtime.h:37
int tm_sec
Definition: pgtime.h:36
int tm_year
Definition: pgtime.h:41
static const unsigned __int64 epoch

References elog, epoch, ERROR, pg_gmtime(), tm, pg_tm::tm_hour, pg_tm::tm_mday, pg_tm::tm_min, pg_tm::tm_mon, pg_tm::tm_sec, and pg_tm::tm_year.

Referenced by date_in(), PGTYPESdate_from_asc(), and SetEpochTimestamp().

◆ GetSQLCurrentTimestamp()

TimestampTz GetSQLCurrentTimestamp ( int32  typmod)

Definition at line 1672 of file timestamp.c.

1673 {
1674  TimestampTz ts;
1675 
1677  if (typmod >= 0)
1678  AdjustTimestampForTypmod(&ts, typmod, NULL);
1679  return ts;
1680 }
bool AdjustTimestampForTypmod(Timestamp *time, int32 typmod, Node *escontext)
Definition: timestamp.c:366
TimestampTz GetCurrentTransactionStartTimestamp(void)
Definition: xact.c:867

References AdjustTimestampForTypmod(), and GetCurrentTransactionStartTimestamp().

Referenced by ExecEvalSQLValueFunction().

◆ GetSQLLocalTimestamp()

Timestamp GetSQLLocalTimestamp ( int32  typmod)

Definition at line 1686 of file timestamp.c.

1687 {
1688  Timestamp ts;
1689 
1691  if (typmod >= 0)
1692  AdjustTimestampForTypmod(&ts, typmod, NULL);
1693  return ts;
1694 }
static Timestamp timestamptz2timestamp(TimestampTz timestamp)
Definition: timestamp.c:6361

References AdjustTimestampForTypmod(), GetCurrentTransactionStartTimestamp(), and timestamptz2timestamp().

Referenced by ExecEvalSQLValueFunction().

◆ interval2itm()

void interval2itm ( Interval  span,
struct pg_itm itm 
)

Definition at line 2047 of file timestamp.c.

2048 {
2049  TimeOffset time;
2050  TimeOffset tfrac;
2051 
2052  itm->tm_year = span.month / MONTHS_PER_YEAR;
2053  itm->tm_mon = span.month % MONTHS_PER_YEAR;
2054  itm->tm_mday = span.day;
2055  time = span.time;
2056 
2057  tfrac = time / USECS_PER_HOUR;
2058  time -= tfrac * USECS_PER_HOUR;
2059  itm->tm_hour = tfrac;
2060  tfrac = time / USECS_PER_MINUTE;
2061  time -= tfrac * USECS_PER_MINUTE;
2062  itm->tm_min = (int) tfrac;
2063  tfrac = time / USECS_PER_SEC;
2064  time -= tfrac * USECS_PER_SEC;
2065  itm->tm_sec = (int) tfrac;
2066  itm->tm_usec = (int) time;
2067 }
#define MONTHS_PER_YEAR
Definition: timestamp.h:108
int32 day
Definition: timestamp.h:51
int32 month
Definition: timestamp.h:52
TimeOffset time
Definition: timestamp.h:49
int64 tm_hour
Definition: timestamp.h:70
int tm_year
Definition: timestamp.h:73
int tm_mon
Definition: timestamp.h:72
int tm_mday
Definition: timestamp.h:71
int tm_sec
Definition: timestamp.h:68
int tm_min
Definition: timestamp.h:69
int tm_usec
Definition: timestamp.h:67

References Interval::day, Interval::month, MONTHS_PER_YEAR, Interval::time, pg_itm::tm_hour, pg_itm::tm_mday, pg_itm::tm_min, pg_itm::tm_mon, pg_itm::tm_sec, pg_itm::tm_usec, pg_itm::tm_year, USECS_PER_HOUR, USECS_PER_MINUTE, and USECS_PER_SEC.

Referenced by interval_out(), interval_part_common(), interval_to_char(), and interval_trunc().

◆ IntervalPGetDatum()

◆ isoweek2date()

void isoweek2date ( int  woy,
int *  year,
int *  mon,
int *  mday 
)

Definition at line 5124 of file timestamp.c.

5125 {
5126  j2date(isoweek2j(*year, woy), year, mon, mday);
5127 }
void j2date(int jd, int *year, int *month, int *day)
Definition: datetime.c:311

References isoweek2j(), and j2date().

Referenced by do_to_timestamp(), timestamp_trunc(), and timestamptz_trunc_internal().

◆ isoweek2j()

int isoweek2j ( int  year,
int  week 
)

Definition at line 5104 of file timestamp.c.

5105 {
5106  int day0,
5107  day4;
5108 
5109  /* fourth day of current year */
5110  day4 = date2j(year, 1, 4);
5111 
5112  /* day0 == offset to first day of week (Monday) */
5113  day0 = j2day(day4 - 1);
5114 
5115  return ((week - 1) * 7) + (day4 - day0);
5116 }

References date2j(), and j2day().

Referenced by date2isoyearday(), do_to_timestamp(), isoweek2date(), and isoweekdate2date().

◆ isoweekdate2date()

void isoweekdate2date ( int  isoweek,
int  wday,
int *  year,
int *  mon,
int *  mday 
)

Definition at line 5137 of file timestamp.c.

5138 {
5139  int jday;
5140 
5141  jday = isoweek2j(*year, isoweek);
5142  /* convert Gregorian week start (Sunday=1) to ISO week start (Monday=1) */
5143  if (wday > 1)
5144  jday += wday - 2;
5145  else
5146  jday += 6;
5147  j2date(jday, year, mon, mday);
5148 }

References isoweek2j(), and j2date().

Referenced by do_to_timestamp().

◆ itm2interval()

int itm2interval ( struct pg_itm itm,
Interval span 
)

Definition at line 2077 of file timestamp.c.

2078 {
2079  int64 total_months = (int64) itm->tm_year * MONTHS_PER_YEAR + itm->tm_mon;
2080 
2081  if (total_months > INT_MAX || total_months < INT_MIN)
2082  return -1;
2083  span->month = (int32) total_months;
2084  span->day = itm->tm_mday;
2086  &span->time))
2087  return -1;
2088  /* tm_min, tm_sec are 32 bits, so intermediate products can't overflow */
2089  if (pg_add_s64_overflow(span->time, itm->tm_min * USECS_PER_MINUTE,
2090  &span->time))
2091  return -1;
2092  if (pg_add_s64_overflow(span->time, itm->tm_sec * USECS_PER_SEC,
2093  &span->time))
2094  return -1;
2095  if (pg_add_s64_overflow(span->time, itm->tm_usec,
2096  &span->time))
2097  return -1;
2098  if (INTERVAL_NOT_FINITE(span))
2099  return -1;
2100  return 0;
2101 }
signed int int32
Definition: c.h:494
#define INTERVAL_NOT_FINITE(i)
Definition: timestamp.h:195
static bool pg_mul_s64_overflow(int64 a, int64 b, int64 *result)
Definition: int.h:219
static bool pg_add_s64_overflow(int64 a, int64 b, int64 *result)
Definition: int.h:161
if(TABLE==NULL||TABLE_index==NULL)
Definition: isn.c:77

References Interval::day, if(), INTERVAL_NOT_FINITE, Interval::month, MONTHS_PER_YEAR, pg_add_s64_overflow(), pg_mul_s64_overflow(), Interval::time, pg_itm::tm_hour, pg_itm::tm_mday, pg_itm::tm_min, pg_itm::tm_mon, pg_itm::tm_sec, pg_itm::tm_usec, pg_itm::tm_year, USECS_PER_HOUR, USECS_PER_MINUTE, and USECS_PER_SEC.

Referenced by interval_trunc(), timestamp_age(), and timestamptz_age().

◆ itmin2interval()

int itmin2interval ( struct pg_itm_in itm_in,
Interval span 
)

Definition at line 2115 of file timestamp.c.

2116 {
2117  int64 total_months = (int64) itm_in->tm_year * MONTHS_PER_YEAR + itm_in->tm_mon;
2118 
2119  if (total_months > INT_MAX || total_months < INT_MIN)
2120  return -1;
2121  span->month = (int32) total_months;
2122  span->day = itm_in->tm_mday;
2123  span->time = itm_in->tm_usec;
2124  return 0;
2125 }
int tm_mon
Definition: timestamp.h:86
int tm_year
Definition: timestamp.h:87
int tm_mday
Definition: timestamp.h:85
int64 tm_usec
Definition: timestamp.h:84

References Interval::day, if(), Interval::month, MONTHS_PER_YEAR, Interval::time, pg_itm_in::tm_mday, pg_itm_in::tm_mon, pg_itm_in::tm_usec, and pg_itm_in::tm_year.

Referenced by interval_in(), and pg_timezone_abbrevs().

◆ SetEpochTimestamp()

Timestamp SetEpochTimestamp ( void  )

Definition at line 2190 of file timestamp.c.

2191 {
2192  Timestamp dt;
2193  struct pg_tm tt,
2194  *tm = &tt;
2195 
2196  GetEpochTime(tm);
2197  /* we don't bother to test for failure ... */
2198  tm2timestamp(tm, 0, NULL, &dt);
2199 
2200  return dt;
2201 } /* SetEpochTimestamp() */
void GetEpochTime(struct pg_tm *tm)
Definition: timestamp.c:2168
int tm2timestamp(struct pg_tm *tm, fsec_t fsec, int *tzp, Timestamp *result)
Definition: timestamp.c:1997

References GetEpochTime(), tm, and tm2timestamp().

Referenced by dttofmtasc_replace(), PGTYPEStimestamp_from_asc(), timestamp_in(), timestamp_part_common(), timestamptz_in(), and timestamptz_part_common().

◆ time_t_to_timestamptz()

TimestampTz time_t_to_timestamptz ( pg_time_t  tm)

Definition at line 1811 of file timestamp.c.

1812 {
1813  TimestampTz result;
1814 
1815  result = (TimestampTz) tm -
1817  result *= USECS_PER_SEC;
1818 
1819  return result;
1820 }

References POSTGRES_EPOCH_JDATE, SECS_PER_DAY, tm, UNIX_EPOCH_JDATE, and USECS_PER_SEC.

Referenced by pg_control_checkpoint(), pg_control_system(), pg_ls_dir_files(), and pg_stat_file().

◆ timestamp2timestamptz_opt_overflow()

TimestampTz timestamp2timestamptz_opt_overflow ( Timestamp  timestamp,
int *  overflow 
)

Definition at line 6292 of file timestamp.c.

6293 {
6294  TimestampTz result;
6295  struct pg_tm tt,
6296  *tm = &tt;
6297  fsec_t fsec;
6298  int tz;
6299 
6300  if (overflow)
6301  *overflow = 0;
6302 
6304  return timestamp;
6305 
6306  /* We don't expect this to fail, but check it pro forma */
6307  if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) == 0)
6308  {
6310 
6311  result = dt2local(timestamp, -tz);
6312 
6313  if (IS_VALID_TIMESTAMP(result))
6314  {
6315  return result;
6316  }
6317  else if (overflow)
6318  {
6319  if (result < MIN_TIMESTAMP)
6320  {
6321  *overflow = -1;
6322  TIMESTAMP_NOBEGIN(result);
6323  }
6324  else
6325  {
6326  *overflow = 1;
6327  TIMESTAMP_NOEND(result);
6328  }
6329  return result;
6330  }
6331  }
6332 
6333  ereport(ERROR,
6334  (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
6335  errmsg("timestamp out of range")));
6336 
6337  return 0;
6338 }
int DetermineTimeZoneOffset(struct pg_tm *tm, pg_tz *tzp)
Definition: datetime.c:1585
static Timestamp dt2local(Timestamp dt, int timezone)
Definition: timestamp.c:2134
int timestamp2tm(Timestamp dt, int *tzp, struct pg_tm *tm, fsec_t *fsec, const char **tzn, pg_tz *attimezone)
Definition: timestamp.c:1901
int32 fsec_t
Definition: timestamp.h:41
#define TIMESTAMP_NOBEGIN(j)
Definition: timestamp.h:159
#define IS_VALID_TIMESTAMP(t)
Definition: timestamp.h:267
#define TIMESTAMP_NOT_FINITE(j)
Definition: timestamp.h:169
#define TIMESTAMP_NOEND(j)
Definition: timestamp.h:164
#define MIN_TIMESTAMP
Definition: timestamp.h:256
PGDLLIMPORT pg_tz * session_timezone
Definition: pgtz.c:28
int64 timestamp

References DetermineTimeZoneOffset(), dt2local(), ereport, errcode(), errmsg(), ERROR, IS_VALID_TIMESTAMP, MIN_TIMESTAMP, session_timezone, timestamp2tm(), TIMESTAMP_NOBEGIN, TIMESTAMP_NOEND, TIMESTAMP_NOT_FINITE, and tm.

Referenced by timestamp2timestamptz(), and timestamp_cmp_timestamptz_internal().

◆ timestamp2tm()

int timestamp2tm ( Timestamp  dt,
int *  tzp,
struct pg_tm tm,
fsec_t fsec,
const char **  tzn,
pg_tz attimezone 
)

Definition at line 1901 of file timestamp.c.

1902 {
1903  Timestamp date;
1904  Timestamp time;
1905  pg_time_t utime;
1906 
1907  /* Use session timezone if caller asks for default */
1908  if (attimezone == NULL)
1909  attimezone = session_timezone;
1910 
1911  time = dt;
1912  TMODULO(time, date, USECS_PER_DAY);
1913 
1914  if (time < INT64CONST(0))
1915  {
1916  time += USECS_PER_DAY;
1917  date -= 1;
1918  }
1919 
1920  /* add offset to go from J2000 back to standard Julian date */
1922 
1923  /* Julian day routine does not work for negative Julian days */
1924  if (date < 0 || date > (Timestamp) INT_MAX)
1925  return -1;
1926 
1927  j2date((int) date, &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
1928  dt2time(time, &tm->tm_hour, &tm->tm_min, &tm->tm_sec, fsec);
1929 
1930  /* Done if no TZ conversion wanted */
1931  if (tzp == NULL)
1932  {
1933  tm->tm_isdst = -1;
1934  tm->tm_gmtoff = 0;
1935  tm->tm_zone = NULL;
1936  if (tzn != NULL)
1937  *tzn = NULL;
1938  return 0;
1939  }
1940 
1941  /*
1942  * If the time falls within the range of pg_time_t, use pg_localtime() to
1943  * rotate to the local time zone.
1944  *
1945  * First, convert to an integral timestamp, avoiding possibly
1946  * platform-specific roundoff-in-wrong-direction errors, and adjust to
1947  * Unix epoch. Then see if we can convert to pg_time_t without loss. This
1948  * coding avoids hardwiring any assumptions about the width of pg_time_t,
1949  * so it should behave sanely on machines without int64.
1950  */
1951  dt = (dt - *fsec) / USECS_PER_SEC +
1953  utime = (pg_time_t) dt;
1954  if ((Timestamp) utime == dt)
1955  {
1956  struct pg_tm *tx = pg_localtime(&utime, attimezone);
1957 
1958  tm->tm_year = tx->tm_year + 1900;
1959  tm->tm_mon = tx->tm_mon + 1;
1960  tm->tm_mday = tx->tm_mday;
1961  tm->tm_hour = tx->tm_hour;
1962  tm->tm_min = tx->tm_min;
1963  tm->tm_sec = tx->tm_sec;
1964  tm->tm_isdst = tx->tm_isdst;
1965  tm->tm_gmtoff = tx->tm_gmtoff;
1966  tm->tm_zone = tx->tm_zone;
1967  *tzp = -tm->tm_gmtoff;
1968  if (tzn != NULL)
1969  *tzn = tm->tm_zone;
1970  }
1971  else
1972  {
1973  /*
1974  * When out of range of pg_time_t, treat as GMT
1975  */
1976  *tzp = 0;
1977  /* Mark this as *no* time zone available */
1978  tm->tm_isdst = -1;
1979  tm->tm_gmtoff = 0;
1980  tm->tm_zone = NULL;
1981  if (tzn != NULL)
1982  *tzn = NULL;
1983  }
1984 
1985  return 0;
1986 }
void dt2time(Timestamp jd, int *hour, int *min, int *sec, fsec_t *fsec)
Definition: timestamp.c:1874
#define USECS_PER_DAY
Definition: timestamp.h:131
#define TMODULO(t, q, u)
Definition: datetime.h:248
struct pg_tm * pg_localtime(const pg_time_t *timep, const pg_tz *tz)
Definition: localtime.c:1344
long date
Definition: pgtypes_date.h:9
const char * tm_zone
Definition: pgtime.h:46
int tm_isdst
Definition: pgtime.h:44
long int tm_gmtoff
Definition: pgtime.h:45

References dt2time(), j2date(), pg_localtime(), POSTGRES_EPOCH_JDATE, SECS_PER_DAY, session_timezone, tm, pg_tm::tm_gmtoff, pg_tm::tm_hour, pg_tm::tm_isdst, pg_tm::tm_mday, pg_tm::tm_min, pg_tm::tm_mon, pg_tm::tm_sec, pg_tm::tm_year, pg_tm::tm_zone, TMODULO, UNIX_EPOCH_JDATE, USECS_PER_DAY, and USECS_PER_SEC.

Referenced by DetermineTimeZoneAbbrevOffsetTS(), GetCurrentTimeUsec(), JsonEncodeDateTime(), make_timestamptz_at_timezone(), map_sql_value_to_xml_value(), PGTYPEStimestamp_add_interval(), PGTYPEStimestamp_fmt_asc(), PGTYPEStimestamp_to_asc(), timestamp2timestamptz_opt_overflow(), timestamp_age(), timestamp_date(), timestamp_out(), timestamp_part_common(), timestamp_pl_interval(), timestamp_recv(), timestamp_time(), timestamp_to_char(), timestamp_trunc(), timestamp_zone(), timestamptz2timestamp(), timestamptz_age(), timestamptz_date(), timestamptz_out(), timestamptz_part_common(), timestamptz_pl_interval_internal(), timestamptz_recv(), timestamptz_time(), timestamptz_timetz(), timestamptz_to_char(), timestamptz_to_str(), timestamptz_trunc_internal(), timestamptz_zone(), and timetz_zone().

◆ timestamp_cmp_internal()

int timestamp_cmp_internal ( Timestamp  dt1,
Timestamp  dt2 
)

◆ timestamp_cmp_timestamptz_internal()

int32 timestamp_cmp_timestamptz_internal ( Timestamp  timestampVal,
TimestampTz  dt2 
)

Definition at line 2325 of file timestamp.c.

2326 {
2327  TimestampTz dt1;
2328  int overflow;
2329 
2330  dt1 = timestamp2timestamptz_opt_overflow(timestampVal, &overflow);
2331  if (overflow > 0)
2332  {
2333  /* dt1 is larger than any finite timestamp, but less than infinity */
2334  return TIMESTAMP_IS_NOEND(dt2) ? -1 : +1;
2335  }
2336  if (overflow < 0)
2337  {
2338  /* dt1 is less than any finite timestamp, but more than -infinity */
2339  return TIMESTAMP_IS_NOBEGIN(dt2) ? +1 : -1;
2340  }
2341 
2342  return timestamptz_cmp_internal(dt1, dt2);
2343 }
TimestampTz timestamp2timestamptz_opt_overflow(Timestamp timestamp, int *overflow)
Definition: timestamp.c:6292
#define TIMESTAMP_IS_NOEND(j)
Definition: timestamp.h:167
#define TIMESTAMP_IS_NOBEGIN(j)
Definition: timestamp.h:162
#define timestamptz_cmp_internal(dt1, dt2)
Definition: timestamp.h:131

References timestamp2timestamptz_opt_overflow(), TIMESTAMP_IS_NOBEGIN, TIMESTAMP_IS_NOEND, and timestamptz_cmp_internal.

Referenced by cmpTimestampToTimestampTz(), timestamp_cmp_timestamptz(), timestamp_eq_timestamptz(), timestamp_ge_timestamptz(), timestamp_gt_timestamptz(), timestamp_le_timestamptz(), timestamp_lt_timestamptz(), timestamp_ne_timestamptz(), timestamptz_cmp_timestamp(), timestamptz_eq_timestamp(), timestamptz_ge_timestamp(), timestamptz_gt_timestamp(), timestamptz_le_timestamp(), timestamptz_lt_timestamp(), and timestamptz_ne_timestamp().

◆ TimestampDifference()

void TimestampDifference ( TimestampTz  start_time,
TimestampTz  stop_time,
long *  secs,
int *  microsecs 
)

Definition at line 1730 of file timestamp.c.

1732 {
1733  TimestampTz diff = stop_time - start_time;
1734 
1735  if (diff <= 0)
1736  {
1737  *secs = 0;
1738  *microsecs = 0;
1739  }
1740  else
1741  {
1742  *secs = (long) (diff / USECS_PER_SEC);
1743  *microsecs = (int) (diff % USECS_PER_SEC);
1744  }
1745 }
static time_t start_time
Definition: pg_ctl.c:94

References start_time, and USECS_PER_SEC.

Referenced by check_log_duration(), has_startup_progress_timeout_expired(), heap_vacuum_rel(), launcher_determine_sleep(), log_disconnections(), LogRecoveryConflict(), pgstat_report_activity(), pgstat_update_dbstats(), ProcSleep(), and schedule_alarm().

◆ TimestampDifferenceExceeds()

◆ TimestampDifferenceMilliseconds()

long TimestampDifferenceMilliseconds ( TimestampTz  start_time,
TimestampTz  stop_time 
)

Definition at line 1766 of file timestamp.c.

1767 {
1768  TimestampTz diff;
1769 
1770  /* Deal with zero or negative elapsed time quickly. */
1771  if (start_time >= stop_time)
1772  return 0;
1773  /* To not fail with timestamp infinities, we must detect overflow. */
1774  if (pg_sub_s64_overflow(stop_time, start_time, &diff))
1775  return (long) INT_MAX;
1776  if (diff >= (INT_MAX * INT64CONST(1000) - 999))
1777  return (long) INT_MAX;
1778  else
1779  return (long) ((diff + 999) / 1000);
1780 }
static bool pg_sub_s64_overflow(int64 a, int64 b, int64 *result)
Definition: int.h:188

References pg_sub_s64_overflow(), and start_time.

Referenced by ApplyLauncherMain(), autoprewarm_main(), bbsink_copystream_archive_contents(), DetermineSleepTime(), do_analyze_rel(), GetReplicationApplyDelay(), GetReplicationTransferLatency(), libpqsrv_cancel(), LogCheckpointEnd(), pgfdw_get_cleanup_result(), PrepareForIncrementalBackup(), recoveryApplyDelay(), WaitForWalSummarization(), WaitForWALToBecomeAvailable(), WalReceiverMain(), and WalSndComputeSleeptime().

◆ TimestampGetDatum()

◆ TimestampTimestampTzRequiresRewrite()

bool TimestampTimestampTzRequiresRewrite ( void  )

Definition at line 6261 of file timestamp.c.

6262 {
6263  long offset;
6264 
6265  if (pg_get_timezone_offset(session_timezone, &offset) && offset == 0)
6266  return false;
6267  return true;
6268 }
bool pg_get_timezone_offset(const pg_tz *tz, long int *gmtoff)
Definition: localtime.c:1851

References pg_get_timezone_offset(), and session_timezone.

Referenced by ATColumnChangeRequiresRewrite().

◆ timestamptz_to_str()

const char* timestamptz_to_str ( TimestampTz  t)

Definition at line 1853 of file timestamp.c.

1854 {
1855  static char buf[MAXDATELEN + 1];
1856  int tz;
1857  struct pg_tm tt,
1858  *tm = &tt;
1859  fsec_t fsec;
1860  const char *tzn;
1861 
1862  if (TIMESTAMP_NOT_FINITE(t))
1864  else if (timestamp2tm(t, &tz, tm, &fsec, &tzn, NULL) == 0)
1865  EncodeDateTime(tm, fsec, true, tz, tzn, USE_ISO_DATES, buf);
1866  else
1867  strlcpy(buf, "(timestamp out of range)", sizeof(buf));
1868 
1869  return buf;
1870 }
void EncodeDateTime(struct pg_tm *tm, fsec_t fsec, bool print_tz, int tz, const char *tzn, int style, char *str)
Definition: datetime.c:4331
void EncodeSpecialTimestamp(Timestamp dt, char *str)
Definition: timestamp.c:1596
#define MAXDATELEN
Definition: datetime.h:200
#define USE_ISO_DATES
Definition: miscadmin.h:235
static char * buf
Definition: pg_test_fsync.c:73
size_t strlcpy(char *dst, const char *src, size_t siz)
Definition: strlcpy.c:45

References buf, EncodeDateTime(), EncodeSpecialTimestamp(), MAXDATELEN, snprintf, strlcpy(), timestamp2tm(), TIMESTAMP_NOT_FINITE, timestamptz_to_time_t(), tm, USE_ISO_DATES, and USECS_PER_SEC.

Referenced by CreateRestartPoint(), getRecoveryStopReason(), InitWalRecovery(), PerformWalRecovery(), pg_decode_commit_prepared_txn(), pg_decode_commit_txn(), pg_decode_prepare_txn(), pg_decode_rollback_prepared_txn(), pg_decode_stream_commit(), pg_decode_stream_prepare(), ProcessStandbyHSFeedbackMessage(), ProcessStandbyReplyMessage(), ProcessWalSndrMessage(), recoveryStopsAfter(), recoveryStopsBefore(), xact_desc_abort(), xact_desc_commit(), xact_desc_prepare(), xlog_desc(), and xlogrecovery_redo().

◆ timestamptz_to_time_t()

pg_time_t timestamptz_to_time_t ( TimestampTz  t)

Definition at line 1833 of file timestamp.c.

1834 {
1835  pg_time_t result;
1836 
1837  result = (pg_time_t) (t / USECS_PER_SEC +
1839 
1840  return result;
1841 }

References POSTGRES_EPOCH_JDATE, SECS_PER_DAY, UNIX_EPOCH_JDATE, and USECS_PER_SEC.

Referenced by DetermineTimeZoneAbbrevOffsetTS(), InitProcessGlobals(), and timestamptz_to_str().

◆ TimestampTzGetDatum()

◆ tm2timestamp()

int tm2timestamp ( struct pg_tm tm,
fsec_t  fsec,
int *  tzp,
Timestamp result 
)

Definition at line 1997 of file timestamp.c.

1998 {
1999  TimeOffset date;
2000  TimeOffset time;
2001 
2002  /* Prevent overflow in Julian-day routines */
2004  {
2005  *result = 0; /* keep compiler quiet */
2006  return -1;
2007  }
2008 
2010  time = time2t(tm->tm_hour, tm->tm_min, tm->tm_sec, fsec);
2011 
2012  *result = date * USECS_PER_DAY + time;
2013  /* check for major overflow */
2014  if ((*result - time) / USECS_PER_DAY != date)
2015  {
2016  *result = 0; /* keep compiler quiet */
2017  return -1;
2018  }
2019  /* check for just-barely overflow (okay except time-of-day wraps) */
2020  /* caution: we want to allow 1999-12-31 24:00:00 */
2021  if ((*result < 0 && date > 0) ||
2022  (*result > 0 && date < -1))
2023  {
2024  *result = 0; /* keep compiler quiet */
2025  return -1;
2026  }
2027  if (tzp != NULL)
2028  *result = dt2local(*result, -(*tzp));
2029 
2030  /* final range check catches just-out-of-range timestamps */
2031  if (!IS_VALID_TIMESTAMP(*result))
2032  {
2033  *result = 0; /* keep compiler quiet */
2034  return -1;
2035  }
2036 
2037  return 0;
2038 }
static TimeOffset time2t(const int hour, const int min, const int sec, const fsec_t fsec)
Definition: timestamp.c:2128
#define IS_VALID_JULIAN(y, m, d)
Definition: timestamp.h:227

References date2j(), dt2local(), IS_VALID_JULIAN, IS_VALID_TIMESTAMP, POSTGRES_EPOCH_JDATE, time2t(), tm, pg_tm::tm_hour, pg_tm::tm_mday, pg_tm::tm_min, pg_tm::tm_mon, pg_tm::tm_sec, pg_tm::tm_year, and USECS_PER_DAY.

Referenced by check_recovery_target_time(), parse_datetime(), PGTYPEStimestamp_add_interval(), PGTYPEStimestamp_current(), PGTYPEStimestamp_defmt_scan(), PGTYPEStimestamp_from_asc(), SetEpochTimestamp(), timestamp_in(), timestamp_pl_interval(), timestamp_trunc(), timestamp_zone(), timestamptz2timestamp(), timestamptz_in(), timestamptz_pl_interval_internal(), timestamptz_trunc_internal(), timestamptz_zone(), and to_timestamp().

Variable Documentation

◆ PgReloadTime

PGDLLIMPORT TimestampTz PgReloadTime
extern

Definition at line 55 of file timestamp.c.

Referenced by pg_conf_load_time(), and ProcessConfigFileInternal().

◆ PgStartTime

PGDLLIMPORT TimestampTz PgStartTime
extern

Definition at line 52 of file timestamp.c.

Referenced by pg_postmaster_start_time(), PostgresSingleUserMain(), and PostmasterMain().