aboutsummaryrefslogtreecommitdiff
path: root/src/include/datatype/timestamp.h
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2012-05-30 19:58:35 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2012-05-30 19:58:35 -0400
commitcd0ff9c0f47784b428981280cd9564bb79a8266a (patch)
treefd4b4f443db074caab0b8e93a1feca140c1eb375 /src/include/datatype/timestamp.h
parent07ab1383e3be9e6f368e2ceb11bf7697d88260f9 (diff)
downloadpostgresql-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.h10
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