diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2012-05-30 19:58:35 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2012-05-30 19:58:35 -0400 |
commit | cd0ff9c0f47784b428981280cd9564bb79a8266a (patch) | |
tree | fd4b4f443db074caab0b8e93a1feca140c1eb375 /src/include/datatype/timestamp.h | |
parent | 07ab1383e3be9e6f368e2ceb11bf7697d88260f9 (diff) | |
download | postgresql-cd0ff9c0f47784b428981280cd9564bb79a8266a.tar.gz postgresql-cd0ff9c0f47784b428981280cd9564bb79a8266a.zip |
Expand the allowed range of timezone offsets to +/-15:59:59 from Greenwich.
We used to only allow offsets less than +/-13 hours, then it was +/14,
then it was +/-15. That's still not good enough though, as per today's bug
report from Patric Bechtel. This time I actually looked through the Olson
timezone database to find the largest offsets used anywhere. The winners
are Asia/Manila, at -15:56:00 until 1844, and America/Metlakatla, at
+15:13:42 until 1867. So we'd better allow offsets less than +/-16 hours.
Given the history, we are way overdue to have some greppable #define
symbols controlling this, so make some ... and also remove an obsolete
comment that didn't get fixed the last time.
Back-patch to all supported branches.
Diffstat (limited to 'src/include/datatype/timestamp.h')
-rw-r--r-- | src/include/datatype/timestamp.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/include/datatype/timestamp.h b/src/include/datatype/timestamp.h index 7d546fbe689..0583d45fad1 100644 --- a/src/include/datatype/timestamp.h +++ b/src/include/datatype/timestamp.h @@ -106,6 +106,16 @@ typedef struct #define USECS_PER_SEC INT64CONST(1000000) /* + * We allow numeric timezone offsets up to 15:59:59 either way from Greenwich. + * Currently, the record holders for wackiest offsets in actual use are zones + * Asia/Manila, at -15:56:00 until 1844, and America/Metlakatla, at +15:13:42 + * until 1867. If we were to reject such values we would fail to dump and + * restore old timestamptz values with these zone settings. + */ +#define MAX_TZDISP_HOUR 15 /* maximum allowed hour part */ +#define TZDISP_LIMIT ((MAX_TZDISP_HOUR + 1) * SECS_PER_HOUR) + +/* * DT_NOBEGIN represents timestamp -infinity; DT_NOEND represents +infinity */ #ifdef HAVE_INT64_TIMESTAMP |