1
0
mirror of https://github.com/postgrespro/pg_probackup.git synced 2025-07-17 07:22:20 +02:00

Issue #31: Times in backup.control is in UTC by default

This commit is contained in:
Arthur Zakirov
2018-07-16 15:18:08 +03:00
parent 188bb11196
commit 059d3845cb
5 changed files with 22 additions and 20 deletions

View File

@ -1836,7 +1836,7 @@ pg_stop_backup(pgBackup *backup)
elog(ERROR, elog(ERROR,
"result of txid_snapshot_xmax() is invalid: %s", "result of txid_snapshot_xmax() is invalid: %s",
PQgetvalue(res, 0, 0)); PQgetvalue(res, 0, 0));
if (!parse_time(PQgetvalue(res, 0, 1), &recovery_time)) if (!parse_time(PQgetvalue(res, 0, 1), &recovery_time, true))
elog(ERROR, elog(ERROR,
"result of current_timestamp is invalid: %s", "result of current_timestamp is invalid: %s",
PQgetvalue(res, 0, 1)); PQgetvalue(res, 0, 1));

View File

@ -1036,7 +1036,7 @@ parseRecoveryTargetOptions(const char *target_time,
rt->time_specified = true; rt->time_specified = true;
rt->target_time_string = target_time; rt->target_time_string = target_time;
if (parse_time(target_time, &dummy_time)) if (parse_time(target_time, &dummy_time, false))
rt->recovery_target_time = dummy_time; rt->recovery_target_time = dummy_time;
else else
elog(ERROR, "Invalid value of --time option %s", target_time); elog(ERROR, "Invalid value of --time option %s", target_time);

View File

@ -191,7 +191,7 @@ get_data_checksum_version(bool safe)
/* /*
* Convert time_t value to ISO-8601 format string * Convert time_t value to ISO-8601 format string. Always set timezone offset.
*/ */
void void
time2iso(char *buf, size_t len, time_t time) time2iso(char *buf, size_t len, time_t time)
@ -199,26 +199,24 @@ time2iso(char *buf, size_t len, time_t time)
struct tm *ptm = gmtime(&time); struct tm *ptm = gmtime(&time);
time_t gmt = mktime(ptm); time_t gmt = mktime(ptm);
time_t offset; time_t offset;
char *ptr = buf;
ptm = localtime(&time); ptm = localtime(&time);
offset = time - gmt + (ptm->tm_isdst ? 3600 : 0); offset = time - gmt + (ptm->tm_isdst ? 3600 : 0);
strftime(buf, len, "%Y-%m-%d %H:%M:%S", ptm); strftime(ptr, len, "%Y-%m-%d %H:%M:%S", ptm);
if (offset != 0) ptr += strlen(ptr);
{ snprintf(ptr, len - (ptr - buf), "%c%02d",
buf += strlen(buf);
sprintf(buf, "%c%02d",
(offset >= 0) ? '+' : '-', (offset >= 0) ? '+' : '-',
abs((int) offset) / SECS_PER_HOUR); abs((int) offset) / SECS_PER_HOUR);
if (abs((int) offset) % SECS_PER_HOUR != 0) if (abs((int) offset) % SECS_PER_HOUR != 0)
{ {
buf += strlen(buf); ptr += strlen(ptr);
sprintf(buf, ":%02d", snprintf(ptr, len - (ptr - buf), ":%02d",
abs((int) offset % SECS_PER_HOUR) / SECS_PER_MINUTE); abs((int) offset % SECS_PER_HOUR) / SECS_PER_MINUTE);
} }
}
} }
/* copied from timestamp.c */ /* copied from timestamp.c */

View File

@ -256,7 +256,8 @@ assign_option(pgut_option *opt, const char *optarg, pgut_optsrc src)
message = "a valid string. But provided: "; message = "a valid string. But provided: ";
break; break;
case 't': case 't':
if (parse_time(optarg, opt->var)) if (parse_time(optarg, opt->var,
opt->source == SOURCE_FILE))
return; return;
message = "a time"; message = "a time";
break; break;
@ -746,9 +747,12 @@ parse_uint64(const char *value, uint64 *result, int flags)
/* /*
* Convert ISO-8601 format string to time_t value. * Convert ISO-8601 format string to time_t value.
*
* If utc_default is true, then if timezone offset isn't specified tz will be
* +00:00.
*/ */
bool bool
parse_time(const char *value, time_t *result) parse_time(const char *value, time_t *result, bool utc_default)
{ {
size_t len; size_t len;
int fields_num, int fields_num,
@ -870,7 +874,7 @@ parse_time(const char *value, time_t *result)
*result = mktime(&tm); *result = mktime(&tm);
/* adjust time zone */ /* adjust time zone */
if (tz_set) if (tz_set || utc_default)
{ {
time_t ltime = time(NULL); time_t ltime = time(NULL);
struct tm *ptm = gmtime(&ltime); struct tm *ptm = gmtime(&ltime);

View File

@ -204,7 +204,7 @@ extern bool parse_int32(const char *value, int32 *result, int flags);
extern bool parse_uint32(const char *value, uint32 *result, int flags); extern bool parse_uint32(const char *value, uint32 *result, int flags);
extern bool parse_int64(const char *value, int64 *result, int flags); extern bool parse_int64(const char *value, int64 *result, int flags);
extern bool parse_uint64(const char *value, uint64 *result, int flags); extern bool parse_uint64(const char *value, uint64 *result, int flags);
extern bool parse_time(const char *value, time_t *result); extern bool parse_time(const char *value, time_t *result, bool utc_default);
extern bool parse_int(const char *value, int *result, int flags, extern bool parse_int(const char *value, int *result, int flags,
const char **hintmsg); const char **hintmsg);