1 /*-------------------------------------------------------------------------
4 * Reimplementations of various backend functions.
6 * Portions Copyright (c) 2013-2024, PostgreSQL Global Development Group
9 * src/bin/pg_waldump/compat.c
11 * This file contains client-side implementations for various backend
12 * functions that the rm_desc functions in *desc.c files rely on.
14 *-------------------------------------------------------------------------
17 /* ugly hack, same as in e.g pg_controldata */
23 #include "utils/datetime.h"
25 /* copied from timestamp.c */
27 timestamptz_to_time_t(TimestampTz t
)
31 result
= (pg_time_t
) (t
/ USECS_PER_SEC
+
32 ((POSTGRES_EPOCH_JDATE
- UNIX_EPOCH_JDATE
) * SECS_PER_DAY
));
37 * Stopgap implementation of timestamptz_to_str that doesn't depend on backend
38 * infrastructure. This will work for timestamps that are within the range
39 * of the platform time_t type. (pg_time_t is compatible except for possibly
42 * XXX the return value points to a static buffer, so beware of using more
43 * than one result value concurrently.
45 * XXX: The backend timestamp infrastructure should instead be split out and
46 * moved into src/common. That's a large project though.
49 timestamptz_to_str(TimestampTz t
)
51 static char buf
[MAXDATELEN
+ 1];
52 char ts
[MAXDATELEN
+ 1];
53 char zone
[MAXDATELEN
+ 1];
54 time_t result
= (time_t) timestamptz_to_time_t(t
);
55 struct tm
*ltime
= localtime(&result
);
57 strftime(ts
, sizeof(ts
), "%Y-%m-%d %H:%M:%S", ltime
);
58 strftime(zone
, sizeof(zone
), "%Z", ltime
);
60 snprintf(buf
, sizeof(buf
), "%s.%06d %s",
61 ts
, (int) (t
% USECS_PER_SEC
), zone
);