Time zone definitions to config files
Here's the patch that generalizes the australian_timezones hack by moving the
compiled-in time zone definitions into a text file. The text file to use is
chosen via a guc.
The patch comes with `template' files and `set' files. The template files
contain all time zones that I could find, i.e. are autogenerated from zic and
later I added other time zones manually like those from the old pgsql source.
The set files are what you can then specify in the configuration. The default
set is called `Default' and should work for like 90% of the world. A guc
parameter called `timezone_abbreviations' specifies which set to load.
Similar
to setting `australian_timezones = true' today, an Australian would set
`timezone_abbreviations = Australia' and the set called `Australia' gets
loaded. Basically this file includes the default set and overrides the time
zone information from there with the conflicting Australian time zones. This
include/override feature makes it possible to keep the local sets really
small
and to ship almost everything in the default set. There is another set,
`India', that also includes the default set but then defines the `IST' time
zone differently (is defined to Israel time by default).
Sets get installed to share/timezone/tznames/sets/ and templates to
share/timezone/tznames/templates.
Anybody can think of better names?
From a functionality point of view the template files are not necessary, they
just serve as a template to copy and paste from for someone who is missing
time zone definitions. Also you can see which time zone names do collide. I'd
vote for including them anyway into the distribution but other people might
think differently.
The set gets re-read after server start and SIGHUP. If an error occurs during
server start, the start fails. If the error occurs while reading the
definitions after SIGHUP, a warning message is issued and no changes get
applied.
The default set also changes, adds and removes a few time zones:
Changes to time zone entries:
BDST (British Double Summer Time) was not marked as DST, is now
AKST (Alaska Standard Time) was marked as DST, but is no longer
ALMST (Almaty Savings Time) was not marked as DST, is now
FKT (Falkland Islands Time) was -2 hours and is -4 now
GEST/GET (Georgia (Summer) Time) was +5/+4 and is +4/+3 now
(there was a time zone change in 2004 (-> zic))
IOT (British Indian Ocean Territory (Chagos)) was +5 and is +6 now
(there was a time zone change in 1996 (-> zic))
KOST (Kosrae Time) was +12 and is now +11
(there was a time zone change in 1999 (-> see zic))
KRAST/KRAT (Krasnoyarsk (Summer) Time) was +7/+8 and now got corrected to
+8/+7
RET (Reunion Island Time) was marked as DST, but is no longer
SCT (Mahe Island Time) was marked as DST, but is no longer
WAT (West Africa Time) was -1, but is +1 actually
New time zones:
PMST added for consistency, PMDT was already there
UCT - Universal Coordinated Time
Time zones names that get removed:
"(init)" means that the time zone existed already in dt.h and is like 7 years
old. The rationale to be more reluctant to remove other entries is that there
might have been a reason for why they got added.
AHST - Alaska/Hawaii Standard Time (init)
http://www.worldtimezone.com/wtz-names/wtz-ahst.html (1967-1983)
AWT - (unknown)
BT - Baghdad Time (init)
CAT - Central Alaska Time
http://www.worldtimezone.com/wtz-names/wtz-cat.html (until 1967)
CVT - Christmas Islands Time (is CXT actually)
found references to Cape Verde Time but with different offset (-)
DNT - Dansk Normal Tid (init)
FST - French Summer Time (init)
FWT - French Winter Time (init)
GST - Guam Standard Time, Russia zone 9 (init)
HDT - Hawaii/Alaska Daylight-Saving Time (init)
http://www.worldtimezone.com/wtz-names/wtz-hdt.html (until 1947)
HMT - Hellas Mediterranean Time (?) (init)
IDLE - International Date Line, East (init)
IDLW - International Date Line, West (init)
IT - Iran Time (init)
JST - Japan Standard Time, Russia zone 8 (init)
JT - Java Time (init)
METDST - Middle Europe Daylight-Saving Time (init)
MEWT - Middle European Winter Time (init)
MT - Moluccas Time (init)
NOR - Norway Standard Time (init)
NT - Nome Time (init)
SST - Swedish Summer Time (init)
SWT - Swedish Winter Time (init)
THAT - found more references for TAHT
TRUK - found more references for TRUT
SET - Seychelles Time (init)
YDT - Yukon Daylight-Saving Time (init)
YST - Yukon Standard Time (init)
ZP4 - (init)
ZP5 - (init)
ZP6 - (init)
Does anybody vote against removing one of those time zones?
The patch also adds a system view pg_timezonenames that contains name, offset
and a boolean flag to indicate whether or not this is a daylight saving time
zone.
Review and comments welcome,
Joachim
(sorry if this mail contains stupid line wrapping, I only have webmail
access right now)
Attachments:
timezoneFiles.difftext/x-patch; charset=iso-8859-1; name=timezoneFiles.diffDownload
diff -cNr cvs/pgsql/src/backend/catalog/system_views.sql cvs.build/pgsql/src/backend/catalog/system_views.sql
*** cvs/pgsql/src/backend/catalog/system_views.sql 2006-05-21 11:01:21.000000000 +0200
--- cvs.build/pgsql/src/backend/catalog/system_views.sql 2006-07-13 18:06:01.000000000 +0200
***************
*** 169,174 ****
--- 169,179 ----
(name text, statement text, prepare_time timestamptz,
parameter_types regtype[], from_sql boolean);
+ CREATE VIEW pg_timezonenames AS
+ SELECT upper(T.name) AS name, T.gmt_offset, T.is_dst
+ FROM pg_timezonename() AS T
+ (name text, gmt_offset interval, is_dst boolean);
+
CREATE VIEW pg_settings AS
SELECT *
FROM pg_show_all_settings() AS A
diff -cNr cvs/pgsql/src/backend/postmaster/postmaster.c cvs.build/pgsql/src/backend/postmaster/postmaster.c
*** cvs/pgsql/src/backend/postmaster/postmaster.c 2006-07-10 18:53:25.000000000 +0200
--- cvs.build/pgsql/src/backend/postmaster/postmaster.c 2006-07-13 18:06:01.000000000 +0200
***************
*** 936,941 ****
--- 936,946 ----
load_ident();
/*
+ * Load timezone offset files
+ */
+ load_tzoffsets(PGC_POSTMASTER);
+
+ /*
* We're ready to rock and roll...
*/
StartupPID = StartupDataBase();
***************
*** 1814,1819 ****
--- 1819,1827 ----
load_hba();
load_ident();
+ /* Reload timezone offset information too */
+ load_tzoffsets(PGC_SIGHUP);
+
#ifdef EXEC_BACKEND
/* Update the starting-point file for future children */
write_nondefault_variables(PGC_SIGHUP);
diff -cNr cvs/pgsql/src/backend/tcop/postgres.c cvs.build/pgsql/src/backend/tcop/postgres.c
*** cvs/pgsql/src/backend/tcop/postgres.c 2006-07-10 18:53:25.000000000 +0200
--- cvs.build/pgsql/src/backend/tcop/postgres.c 2006-07-13 18:32:03.000000000 +0200
***************
*** 40,45 ****
--- 40,46 ----
#include "libpq/pqformat.h"
#include "libpq/pqsignal.h"
#include "miscadmin.h"
+ #include "utils/tzparser.h"
#include "nodes/print.h"
#include "optimizer/cost.h"
#include "optimizer/planner.h"
***************
*** 3163,3168 ****
--- 3164,3173 ----
{
got_SIGHUP = false;
ProcessConfigFile(PGC_SIGHUP);
+ /*
+ * Load timezone offset files
+ */
+ load_tzoffsets(PGC_POSTMASTER);
}
/*
diff -cNr cvs/pgsql/src/backend/utils/adt/datetime.c cvs.build/pgsql/src/backend/utils/adt/datetime.c
*** cvs/pgsql/src/backend/utils/adt/datetime.c 2006-06-11 20:21:38.000000000 +0200
--- cvs.build/pgsql/src/backend/utils/adt/datetime.c 2006-07-13 18:06:01.000000000 +0200
***************
*** 20,30 ****
--- 20,34 ----
#include <limits.h>
#include <math.h>
+ #include "access/heapam.h"
#include "access/xact.h"
+ #include "catalog/pg_type.h"
+ #include "funcapi.h"
#include "miscadmin.h"
#include "utils/builtins.h"
#include "utils/datetime.h"
#include "utils/guc.h"
+ #include "utils/tzparser.h"
static int DecodeNumber(int flen, char *field, bool haveTextMonth,
***************
*** 88,513 ****
* which are 30 or 45 minutes away from an even hour, most are on an hour
* boundary, and none on other boundaries.
*
- * Let's include all strings from my current zic time zone database.
- * Not all of them are unique, or even very understandable, so we will
- * leave some commented out for now.
*/
! static datetkn datetktbl[] = {
/* text, token, lexval */
{EARLY, RESERV, DTK_EARLY}, /* "-infinity" reserved for "early time" */
{"abstime", IGNORE_DTF, 0}, /* for pre-v6.1 "Invalid Abstime" */
- {"acsst", DTZ, POS(42)}, /* Cent. Australia */
- {"acst", DTZ, NEG(16)}, /* Atlantic/Porto Acre Summer Time */
- {"act", TZ, NEG(20)}, /* Atlantic/Porto Acre Time */
{DA_D, ADBC, AD}, /* "ad" for years > 0 */
- {"adt", DTZ, NEG(12)}, /* Atlantic Daylight Time */
- {"aesst", DTZ, POS(44)}, /* E. Australia */
- {"aest", TZ, POS(40)}, /* Australia Eastern Std Time */
- {"aft", TZ, POS(18)}, /* Kabul */
- {"ahst", TZ, NEG(40)}, /* Alaska-Hawaii Std Time */
- {"akdt", DTZ, NEG(32)}, /* Alaska Daylight Time */
- {"akst", DTZ, NEG(36)}, /* Alaska Standard Time */
{"allballs", RESERV, DTK_ZULU}, /* 00:00:00 */
- {"almst", TZ, POS(28)}, /* Almaty Savings Time */
- {"almt", TZ, POS(24)}, /* Almaty Time */
{"am", AMPM, AM},
- {"amst", DTZ, POS(20)}, /* Armenia Summer Time (Yerevan) */
- #if 0
- {"amst", DTZ, NEG(12)}, /* Amazon Summer Time (Porto Velho) */
- #endif
- {"amt", TZ, POS(16)}, /* Armenia Time (Yerevan) */
- #if 0
- {"amt", TZ, NEG(16)}, /* Amazon Time (Porto Velho) */
- #endif
- {"anast", DTZ, POS(52)}, /* Anadyr Summer Time (Russia) */
- {"anat", TZ, POS(48)}, /* Anadyr Time (Russia) */
{"apr", MONTH, 4},
{"april", MONTH, 4},
- #if 0
- aqtst
- aqtt
- arst
- #endif
- {"art", TZ, NEG(12)}, /* Argentina Time */
- #if 0
- ashst
- ast /* Atlantic Standard Time, Arabia Standard
- * Time, Acre Standard Time */
- #endif
- {"ast", TZ, NEG(16)}, /* Atlantic Std Time (Canada) */
{"at", IGNORE_DTF, 0}, /* "at" (throwaway) */
{"aug", MONTH, 8},
{"august", MONTH, 8},
- {"awsst", DTZ, POS(36)}, /* W. Australia */
- {"awst", TZ, POS(32)}, /* W. Australia */
- {"awt", DTZ, NEG(12)},
- {"azost", DTZ, POS(0)}, /* Azores Summer Time */
- {"azot", TZ, NEG(4)}, /* Azores Time */
- {"azst", DTZ, POS(20)}, /* Azerbaijan Summer Time */
- {"azt", TZ, POS(16)}, /* Azerbaijan Time */
{DB_C, ADBC, BC}, /* "bc" for years <= 0 */
- {"bdst", TZ, POS(8)}, /* British Double Summer Time */
- {"bdt", TZ, POS(24)}, /* Dacca */
- {"bnt", TZ, POS(32)}, /* Brunei Darussalam Time */
- {"bort", TZ, POS(32)}, /* Borneo Time (Indonesia) */
- #if 0
- bortst
- bost
- #endif
- {"bot", TZ, NEG(16)}, /* Bolivia Time */
- {"bra", TZ, NEG(12)}, /* Brazil Time */
- {"brst", DTZ, NEG(8)}, /* Brasilia Summer Time */
- {"brt", TZ, NEG(12)}, /* Brasilia Time */
- {"bst", DTZ, POS(4)}, /* British Summer Time */
- #if 0
- {"bst", TZ, NEG(12)}, /* Brazil Standard Time */
- {"bst", DTZ, NEG(44)}, /* Bering Summer Time */
- #endif
- {"bt", TZ, POS(12)}, /* Baghdad Time */
- {"btt", TZ, POS(24)}, /* Bhutan Time */
- {"cadt", DTZ, POS(42)}, /* Central Australian DST */
- {"cast", TZ, POS(38)}, /* Central Australian ST */
- {"cat", TZ, NEG(40)}, /* Central Alaska Time */
- {"cct", TZ, POS(32)}, /* China Coast Time */
- #if 0
- {"cct", TZ, POS(26)}, /* Indian Cocos (Island) Time */
- #endif
- {"cdt", DTZ, NEG(20)}, /* Central Daylight Time */
- {"cest", DTZ, POS(8)}, /* Central European Dayl.Time */
- {"cet", TZ, POS(4)}, /* Central European Time */
- {"cetdst", DTZ, POS(8)}, /* Central European Dayl.Time */
- {"chadt", DTZ, POS(55)}, /* Chatham Island Daylight Time (13:45) */
- {"chast", TZ, POS(51)}, /* Chatham Island Time (12:45) */
- #if 0
- ckhst
- #endif
- {"ckt", TZ, POS(48)}, /* Cook Islands Time */
- {"clst", DTZ, NEG(12)}, /* Chile Summer Time */
- {"clt", TZ, NEG(16)}, /* Chile Time */
- #if 0
- cost
- #endif
- {"cot", TZ, NEG(20)}, /* Columbia Time */
- {"cst", TZ, NEG(24)}, /* Central Standard Time */
{DCURRENT, RESERV, DTK_CURRENT}, /* "current" is always now */
- #if 0
- cvst
- #endif
- {"cvt", TZ, POS(28)}, /* Christmas Island Time (Indian Ocean) */
- {"cxt", TZ, POS(28)}, /* Christmas Island Time (Indian Ocean) */
{"d", UNITS, DTK_DAY}, /* "day of month" for ISO input */
- {"davt", TZ, POS(28)}, /* Davis Time (Antarctica) */
- {"ddut", TZ, POS(40)}, /* Dumont-d'Urville Time (Antarctica) */
{"dec", MONTH, 12},
{"december", MONTH, 12},
- {"dnt", TZ, POS(4)}, /* Dansk Normal Tid */
{"dow", RESERV, DTK_DOW}, /* day of week */
{"doy", RESERV, DTK_DOY}, /* day of year */
{"dst", DTZMOD, 6},
- #if 0
- {"dusst", DTZ, POS(24)}, /* Dushanbe Summer Time */
- #endif
- {"easst", DTZ, NEG(20)}, /* Easter Island Summer Time */
- {"east", TZ, NEG(24)}, /* Easter Island Time */
- {"eat", TZ, POS(12)}, /* East Africa Time */
- #if 0
- {"east", DTZ, POS(16)}, /* Indian Antananarivo Savings Time */
- {"eat", TZ, POS(12)}, /* Indian Antananarivo Time */
- {"ect", TZ, NEG(16)}, /* Eastern Caribbean Time */
- {"ect", TZ, NEG(20)}, /* Ecuador Time */
- #endif
- {"edt", DTZ, NEG(16)}, /* Eastern Daylight Time */
- {"eest", DTZ, POS(12)}, /* Eastern Europe Summer Time */
- {"eet", TZ, POS(8)}, /* East. Europe, USSR Zone 1 */
- {"eetdst", DTZ, POS(12)}, /* Eastern Europe Daylight Time */
- {"egst", DTZ, POS(0)}, /* East Greenland Summer Time */
- {"egt", TZ, NEG(4)}, /* East Greenland Time */
- #if 0
- ehdt
- #endif
{EPOCH, RESERV, DTK_EPOCH}, /* "epoch" reserved for system epoch time */
- {"est", TZ, NEG(20)}, /* Eastern Standard Time */
{"feb", MONTH, 2},
{"february", MONTH, 2},
- {"fjst", DTZ, NEG(52)}, /* Fiji Summer Time (13 hour offset!) */
- {"fjt", TZ, NEG(48)}, /* Fiji Time */
- {"fkst", DTZ, NEG(12)}, /* Falkland Islands Summer Time */
- {"fkt", TZ, NEG(8)}, /* Falkland Islands Time */
- {"fnst", DTZ, NEG(4)}, /* Fernando de Noronha Summer Time */
- {"fnt", TZ, NEG(8)}, /* Fernando de Noronha Time */
{"fri", DOW, 5},
{"friday", DOW, 5},
- {"fst", TZ, POS(4)}, /* French Summer Time */
- {"fwt", DTZ, POS(8)}, /* French Winter Time */
- {"galt", TZ, NEG(24)}, /* Galapagos Time */
- {"gamt", TZ, NEG(36)}, /* Gambier Time */
- {"gest", DTZ, POS(20)}, /* Georgia Summer Time */
- {"get", TZ, POS(16)}, /* Georgia Time */
- {"gft", TZ, NEG(12)}, /* French Guiana Time */
- #if 0
- ghst
- #endif
- {"gilt", TZ, POS(48)}, /* Gilbert Islands Time */
- {"gmt", TZ, POS(0)}, /* Greenwich Mean Time */
- {"gst", TZ, POS(40)}, /* Guam Std Time, USSR Zone 9 */
- {"gyt", TZ, NEG(16)}, /* Guyana Time */
{"h", UNITS, DTK_HOUR}, /* "hour" */
- #if 0
- hadt
- hast
- #endif
- {"hdt", DTZ, NEG(36)}, /* Hawaii/Alaska Daylight Time */
- #if 0
- hkst
- #endif
- {"hkt", TZ, POS(32)}, /* Hong Kong Time */
- #if 0
- {"hmt", TZ, POS(12)}, /* Hellas ? ? */
- hovst
- hovt
- #endif
- {"hst", TZ, NEG(40)}, /* Hawaii Std Time */
- #if 0
- hwt
- #endif
- {"ict", TZ, POS(28)}, /* Indochina Time */
- {"idle", TZ, POS(48)}, /* Intl. Date Line, East */
- {"idlw", TZ, NEG(48)}, /* Intl. Date Line, West */
- #if 0
- idt /* Israeli, Iran, Indian Daylight Time */
- #endif
{LATE, RESERV, DTK_LATE}, /* "infinity" reserved for "late time" */
{INVALID, RESERV, DTK_INVALID}, /* "invalid" reserved for bad time */
- {"iot", TZ, POS(20)}, /* Indian Chagos Time */
- {"irkst", DTZ, POS(36)}, /* Irkutsk Summer Time */
- {"irkt", TZ, POS(32)}, /* Irkutsk Time */
- {"irt", TZ, POS(14)}, /* Iran Time */
- #if 0
- isst
- #endif
- {"ist", TZ, POS(8)}, /* Israel */
- {"it", TZ, POS(14)}, /* Iran Time */
{"j", UNITS, DTK_JULIAN},
{"jan", MONTH, 1},
{"january", MONTH, 1},
- {"javt", TZ, POS(28)}, /* Java Time (07:00? see JT) */
- {"jayt", TZ, POS(36)}, /* Jayapura Time (Indonesia) */
{"jd", UNITS, DTK_JULIAN},
- {"jst", TZ, POS(36)}, /* Japan Std Time,USSR Zone 8 */
- {"jt", TZ, POS(30)}, /* Java Time (07:30? see JAVT) */
{"jul", MONTH, 7},
{"julian", UNITS, DTK_JULIAN},
{"july", MONTH, 7},
{"jun", MONTH, 6},
{"june", MONTH, 6},
- {"kdt", DTZ, POS(40)}, /* Korea Daylight Time */
- {"kgst", DTZ, POS(24)}, /* Kyrgyzstan Summer Time */
- {"kgt", TZ, POS(20)}, /* Kyrgyzstan Time */
- {"kost", TZ, POS(48)}, /* Kosrae Time */
- {"krast", DTZ, POS(28)}, /* Krasnoyarsk Summer Time */
- {"krat", TZ, POS(32)}, /* Krasnoyarsk Standard Time */
- {"kst", TZ, POS(36)}, /* Korea Standard Time */
- {"lhdt", DTZ, POS(44)}, /* Lord Howe Daylight Time, Australia */
- {"lhst", TZ, POS(42)}, /* Lord Howe Standard Time, Australia */
- {"ligt", TZ, POS(40)}, /* From Melbourne, Australia */
- {"lint", TZ, POS(56)}, /* Line Islands Time (Kiribati; +14 hours!) */
- {"lkt", TZ, POS(24)}, /* Lanka Time */
{"m", UNITS, DTK_MONTH}, /* "month" for ISO input */
- {"magst", DTZ, POS(48)}, /* Magadan Summer Time */
- {"magt", TZ, POS(44)}, /* Magadan Time */
{"mar", MONTH, 3},
{"march", MONTH, 3},
- {"mart", TZ, NEG(38)}, /* Marquesas Time */
- {"mawt", TZ, POS(24)}, /* Mawson, Antarctica */
{"may", MONTH, 5},
- {"mdt", DTZ, NEG(24)}, /* Mountain Daylight Time */
- {"mest", DTZ, POS(8)}, /* Middle Europe Summer Time */
- {"met", TZ, POS(4)}, /* Middle Europe Time */
- {"metdst", DTZ, POS(8)}, /* Middle Europe Daylight Time */
- {"mewt", TZ, POS(4)}, /* Middle Europe Winter Time */
- {"mez", TZ, POS(4)}, /* Middle Europe Zone */
- {"mht", TZ, POS(48)}, /* Kwajalein */
{"mm", UNITS, DTK_MINUTE}, /* "minute" for ISO input */
- {"mmt", TZ, POS(26)}, /* Myanmar Time */
{"mon", DOW, 1},
{"monday", DOW, 1},
- #if 0
- most
- #endif
- {"mpt", TZ, POS(40)}, /* North Mariana Islands Time */
- {"msd", DTZ, POS(16)}, /* Moscow Summer Time */
- {"msk", TZ, POS(12)}, /* Moscow Time */
- {"mst", TZ, NEG(28)}, /* Mountain Standard Time */
- {"mt", TZ, POS(34)}, /* Moluccas Time */
- {"mut", TZ, POS(16)}, /* Mauritius Island Time */
- {"mvt", TZ, POS(20)}, /* Maldives Island Time */
- {"myt", TZ, POS(32)}, /* Malaysia Time */
- #if 0
- ncst
- #endif
- {"nct", TZ, POS(44)}, /* New Caledonia Time */
- {"ndt", DTZ, NEG(10)}, /* Nfld. Daylight Time */
- {"nft", TZ, NEG(14)}, /* Newfoundland Standard Time */
- {"nor", TZ, POS(4)}, /* Norway Standard Time */
{"nov", MONTH, 11},
{"november", MONTH, 11},
- {"novst", DTZ, POS(28)}, /* Novosibirsk Summer Time */
- {"novt", TZ, POS(24)}, /* Novosibirsk Standard Time */
{NOW, RESERV, DTK_NOW}, /* current transaction time */
- {"npt", TZ, POS(23)}, /* Nepal Standard Time (GMT-5:45) */
- {"nst", TZ, NEG(14)}, /* Nfld. Standard Time */
- {"nt", TZ, NEG(44)}, /* Nome Time */
- {"nut", TZ, NEG(44)}, /* Niue Time */
- {"nzdt", DTZ, POS(52)}, /* New Zealand Daylight Time */
- {"nzst", TZ, POS(48)}, /* New Zealand Standard Time */
- {"nzt", TZ, POS(48)}, /* New Zealand Time */
{"oct", MONTH, 10},
{"october", MONTH, 10},
- {"omsst", DTZ, POS(28)}, /* Omsk Summer Time */
- {"omst", TZ, POS(24)}, /* Omsk Time */
{"on", IGNORE_DTF, 0}, /* "on" (throwaway) */
- {"pdt", DTZ, NEG(28)}, /* Pacific Daylight Time */
- #if 0
- pest
- #endif
- {"pet", TZ, NEG(20)}, /* Peru Time */
- {"petst", DTZ, POS(52)}, /* Petropavlovsk-Kamchatski Summer Time */
- {"pett", TZ, POS(48)}, /* Petropavlovsk-Kamchatski Time */
- {"pgt", TZ, POS(40)}, /* Papua New Guinea Time */
- {"phot", TZ, POS(52)}, /* Phoenix Islands (Kiribati) Time */
- #if 0
- phst
- #endif
- {"pht", TZ, POS(32)}, /* Phillipine Time */
- {"pkt", TZ, POS(20)}, /* Pakistan Time */
{"pm", AMPM, PM},
- {"pmdt", DTZ, NEG(8)}, /* Pierre & Miquelon Daylight Time */
- #if 0
- pmst
- #endif
- {"pont", TZ, POS(44)}, /* Ponape Time (Micronesia) */
- {"pst", TZ, NEG(32)}, /* Pacific Standard Time */
- {"pwt", TZ, POS(36)}, /* Palau Time */
- {"pyst", DTZ, NEG(12)}, /* Paraguay Summer Time */
- {"pyt", TZ, NEG(16)}, /* Paraguay Time */
- {"ret", DTZ, POS(16)}, /* Reunion Island Time */
{"s", UNITS, DTK_SECOND}, /* "seconds" for ISO input */
- {"sadt", DTZ, POS(42)}, /* S. Australian Dayl. Time */
- #if 0
- samst
- samt
- #endif
- {"sast", TZ, POS(38)}, /* South Australian Std Time */
{"sat", DOW, 6},
{"saturday", DOW, 6},
- #if 0
- sbt
- #endif
- {"sct", DTZ, POS(16)}, /* Mahe Island Time */
{"sep", MONTH, 9},
{"sept", MONTH, 9},
{"september", MONTH, 9},
- {"set", TZ, NEG(4)}, /* Seychelles Time ?? */
- #if 0
- sgt
- #endif
- {"sst", DTZ, POS(8)}, /* Swedish Summer Time */
{"sun", DOW, 0},
{"sunday", DOW, 0},
- {"swt", TZ, POS(4)}, /* Swedish Winter Time */
- #if 0
- syot
- #endif
{"t", ISOTIME, DTK_TIME}, /* Filler for ISO time fields */
- {"tft", TZ, POS(20)}, /* Kerguelen Time */
- {"that", TZ, NEG(40)}, /* Tahiti Time */
{"thu", DOW, 4},
{"thur", DOW, 4},
{"thurs", DOW, 4},
{"thursday", DOW, 4},
- {"tjt", TZ, POS(20)}, /* Tajikistan Time */
- {"tkt", TZ, NEG(40)}, /* Tokelau Time */
- {"tmt", TZ, POS(20)}, /* Turkmenistan Time */
{TODAY, RESERV, DTK_TODAY}, /* midnight */
{TOMORROW, RESERV, DTK_TOMORROW}, /* tomorrow midnight */
- #if 0
- tost
- #endif
- {"tot", TZ, POS(52)}, /* Tonga Time */
- #if 0
- tpt
- #endif
- {"truk", TZ, POS(40)}, /* Truk Time */
{"tue", DOW, 2},
{"tues", DOW, 2},
{"tuesday", DOW, 2},
- {"tvt", TZ, POS(48)}, /* Tuvalu Time */
- #if 0
- uct
- #endif
- {"ulast", DTZ, POS(36)}, /* Ulan Bator Summer Time */
- {"ulat", TZ, POS(32)}, /* Ulan Bator Time */
{"undefined", RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
- {"ut", TZ, POS(0)},
- {"utc", TZ, POS(0)},
- {"uyst", DTZ, NEG(8)}, /* Uruguay Summer Time */
- {"uyt", TZ, NEG(12)}, /* Uruguay Time */
- {"uzst", DTZ, POS(24)}, /* Uzbekistan Summer Time */
- {"uzt", TZ, POS(20)}, /* Uzbekistan Time */
- {"vet", TZ, NEG(16)}, /* Venezuela Time */
- {"vlast", DTZ, POS(44)}, /* Vladivostok Summer Time */
- {"vlat", TZ, POS(40)}, /* Vladivostok Time */
- #if 0
- vust
- #endif
- {"vut", TZ, POS(44)}, /* Vanuata Time */
- {"wadt", DTZ, POS(32)}, /* West Australian DST */
- {"wakt", TZ, POS(48)}, /* Wake Time */
- #if 0
- warst
- #endif
- {"wast", TZ, POS(28)}, /* West Australian Std Time */
- {"wat", TZ, NEG(4)}, /* West Africa Time */
- {"wdt", DTZ, POS(36)}, /* West Australian DST */
{"wed", DOW, 3},
{"wednesday", DOW, 3},
{"weds", DOW, 3},
- {"west", DTZ, POS(4)}, /* Western Europe Summer Time */
- {"wet", TZ, POS(0)}, /* Western Europe */
- {"wetdst", DTZ, POS(4)}, /* Western Europe Daylight Savings Time */
- {"wft", TZ, POS(48)}, /* Wallis and Futuna Time */
- {"wgst", DTZ, NEG(8)}, /* West Greenland Summer Time */
- {"wgt", TZ, NEG(12)}, /* West Greenland Time */
- {"wst", TZ, POS(32)}, /* West Australian Standard Time */
{"y", UNITS, DTK_YEAR}, /* "year" for ISO input */
- {"yakst", DTZ, POS(40)}, /* Yakutsk Summer Time */
- {"yakt", TZ, POS(36)}, /* Yakutsk Time */
- {"yapt", TZ, POS(40)}, /* Yap Time (Micronesia) */
- {"ydt", DTZ, NEG(32)}, /* Yukon Daylight Time */
- {"yekst", DTZ, POS(24)}, /* Yekaterinburg Summer Time */
- {"yekt", TZ, POS(20)}, /* Yekaterinburg Time */
{YESTERDAY, RESERV, DTK_YESTERDAY}, /* yesterday midnight */
- {"yst", TZ, NEG(36)}, /* Yukon Standard Time */
- {"z", TZ, POS(0)}, /* time zone tag per ISO-8601 */
- {"zp4", TZ, NEG(16)}, /* UTC +4 hours. */
- {"zp5", TZ, NEG(20)}, /* UTC +5 hours. */
- {"zp6", TZ, NEG(24)}, /* UTC +6 hours. */
- {ZULU, TZ, POS(0)}, /* UTC */
- };
-
- static unsigned int szdatetktbl = sizeof datetktbl / sizeof datetktbl[0];
-
- /* Used for SET australian_timezones to override North American ones */
- static datetkn australian_datetktbl[] = {
- {"acst", TZ, POS(38)}, /* Cent. Australia */
- {"cst", TZ, POS(42)}, /* Australia Central Std Time */
- {"east", TZ, POS(40)}, /* East Australian Std Time */
- {"est", TZ, POS(40)}, /* Australia Eastern Std Time */
- {"sat", TZ, POS(38)},
};
! static unsigned int australian_szdatetktbl = sizeof australian_datetktbl /
! sizeof australian_datetktbl[0];
static datetkn deltatktbl[] = {
/* text, token, lexval */
--- 92,177 ----
* which are 30 or 45 minutes away from an even hour, most are on an hour
* boundary, and none on other boundaries.
*
*/
! static datetkn *datetktbl = NULL;
! static datetkn datetktbl_without_timezones[] = {
/* text, token, lexval */
{EARLY, RESERV, DTK_EARLY}, /* "-infinity" reserved for "early time" */
{"abstime", IGNORE_DTF, 0}, /* for pre-v6.1 "Invalid Abstime" */
{DA_D, ADBC, AD}, /* "ad" for years > 0 */
{"allballs", RESERV, DTK_ZULU}, /* 00:00:00 */
{"am", AMPM, AM},
{"apr", MONTH, 4},
{"april", MONTH, 4},
{"at", IGNORE_DTF, 0}, /* "at" (throwaway) */
{"aug", MONTH, 8},
{"august", MONTH, 8},
{DB_C, ADBC, BC}, /* "bc" for years <= 0 */
{DCURRENT, RESERV, DTK_CURRENT}, /* "current" is always now */
{"d", UNITS, DTK_DAY}, /* "day of month" for ISO input */
{"dec", MONTH, 12},
{"december", MONTH, 12},
{"dow", RESERV, DTK_DOW}, /* day of week */
{"doy", RESERV, DTK_DOY}, /* day of year */
{"dst", DTZMOD, 6},
{EPOCH, RESERV, DTK_EPOCH}, /* "epoch" reserved for system epoch time */
{"feb", MONTH, 2},
{"february", MONTH, 2},
{"fri", DOW, 5},
{"friday", DOW, 5},
{"h", UNITS, DTK_HOUR}, /* "hour" */
{LATE, RESERV, DTK_LATE}, /* "infinity" reserved for "late time" */
{INVALID, RESERV, DTK_INVALID}, /* "invalid" reserved for bad time */
{"j", UNITS, DTK_JULIAN},
{"jan", MONTH, 1},
{"january", MONTH, 1},
{"jd", UNITS, DTK_JULIAN},
{"jul", MONTH, 7},
{"julian", UNITS, DTK_JULIAN},
{"july", MONTH, 7},
{"jun", MONTH, 6},
{"june", MONTH, 6},
{"m", UNITS, DTK_MONTH}, /* "month" for ISO input */
{"mar", MONTH, 3},
{"march", MONTH, 3},
{"may", MONTH, 5},
{"mm", UNITS, DTK_MINUTE}, /* "minute" for ISO input */
{"mon", DOW, 1},
{"monday", DOW, 1},
{"nov", MONTH, 11},
{"november", MONTH, 11},
{NOW, RESERV, DTK_NOW}, /* current transaction time */
{"oct", MONTH, 10},
{"october", MONTH, 10},
{"on", IGNORE_DTF, 0}, /* "on" (throwaway) */
{"pm", AMPM, PM},
{"s", UNITS, DTK_SECOND}, /* "seconds" for ISO input */
{"sat", DOW, 6},
{"saturday", DOW, 6},
{"sep", MONTH, 9},
{"sept", MONTH, 9},
{"september", MONTH, 9},
{"sun", DOW, 0},
{"sunday", DOW, 0},
{"t", ISOTIME, DTK_TIME}, /* Filler for ISO time fields */
{"thu", DOW, 4},
{"thur", DOW, 4},
{"thurs", DOW, 4},
{"thursday", DOW, 4},
{TODAY, RESERV, DTK_TODAY}, /* midnight */
{TOMORROW, RESERV, DTK_TOMORROW}, /* tomorrow midnight */
{"tue", DOW, 2},
{"tues", DOW, 2},
{"tuesday", DOW, 2},
{"undefined", RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
{"wed", DOW, 3},
{"wednesday", DOW, 3},
{"weds", DOW, 3},
{"y", UNITS, DTK_YEAR}, /* "year" for ISO input */
{YESTERDAY, RESERV, DTK_YESTERDAY}, /* yesterday midnight */
};
! static unsigned int szdatetktbl;
static datetkn deltatktbl[] = {
/* text, token, lexval */
***************
*** 583,588 ****
--- 247,410 ----
static datetkn *deltacache[MAXDATEFIELDS] = {NULL};
+ /*
+ * This function gets called at server startup and builds up the final list of
+ * datetime tokens. It gets a pointer to a linked list of type struct tzEntry
+ * containing timezone information. Those get merged with statically defined
+ * datetktbl_without_timezones[] (both lists are sorted).
+ *
+ * Every "struct tzEntry" will be freed while walking through the list. The
+ * "abbrev" member is also allocated on the heap but the pointer will be
+ * transferred directly into the new list.
+ *
+ * The function gets called from the TimeZoneMemoryContext (see tzparser.c).
+ */
+
+ int
+ InitTimeZones(tzList tze)
+ {
+ int iterNoTz, iterNoTzMax, iterNew;
+ int nTzEntries;
+ int i;
+ tzList p;
+
+ /* check how many entries we actually have */
+ p = tze;
+ nTzEntries = 0;
+ while (p)
+ {
+ nTzEntries++;
+ p = p->next;
+ }
+
+ iterNoTz = iterNew = 0;
+ iterNoTzMax = (sizeof(datetktbl_without_timezones) / sizeof(datetkn));
+ szdatetktbl = iterNoTzMax + nTzEntries;
+ datetktbl = (datetkn*) palloc(sizeof(datetkn) * szdatetktbl);
+
+ for(i = 0; i < szdatetktbl; i++)
+ {
+ /*
+ * Basically this is a simple merge of two sorted lists into one.
+ *
+ * !tze: No more entries in timezone list
+ * iterNoTz == iterNoTzMax: No more entries in non-timezone array
+ *
+ * If there are entries left in both lists, use strncmp() to see which
+ * item goes first alphabetically.
+ */
+ if ((!tze || strncmp(tze->abbrev,
+ datetktbl_without_timezones[iterNoTz].token,
+ TOKMAXLEN) > 0) && iterNoTz < iterNoTzMax)
+ datetktbl[iterNew++] = datetktbl_without_timezones[iterNoTz++];
+ else
+ {
+ strncpy(datetktbl[iterNew].token, tze->abbrev, TOKMAXLEN);
+ datetktbl[iterNew].type = tze->is_dst ? DTZ : TZ;
+ TOVAL(&datetktbl[iterNew], tze->offset / 60);
+ tze = tze->next;
+ iterNew++;
+ }
+ }
+
+ /* clear date cache */
+ for (i = 0; i < MAXDATEFIELDS; i++)
+ datecache[i] = NULL;
+
+ return 0;
+ }
+
+ /*
+ * This set returning function reads all the available time zone abbreviations
+ * and returns a set of (name, gmt_offset, is_dst).
+ */
+
+ Datum
+ pg_timezonename(PG_FUNCTION_ARGS)
+ {
+ FuncCallContext *funcctx;
+ int *pindex;
+ Datum result;
+ Interval *resInterval;
+ HeapTuple tuple;
+ Datum values[3];
+ bool nulls[3];
+ char buffer[TOKMAXLEN + 1];
+ struct pg_tm tm;
+
+ /* stuff done only on the first call of the function */
+ if (SRF_IS_FIRSTCALL())
+ {
+ TupleDesc tupdesc;
+ MemoryContext oldcontext;
+
+ /* create a function context for cross-call persistence */
+ funcctx = SRF_FIRSTCALL_INIT();
+
+ /*
+ * switch to memory context appropriate for multiple function
+ * calls
+ */
+ oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
+
+ /* allocate memory for user context */
+ pindex = (int *) palloc(sizeof(int));
+ *pindex = 0;
+ funcctx->user_fctx = (void *) pindex;
+
+ /*
+ * build tupdesc for result tuples. This must match the
+ * definition of the pg_timezonenames view in
+ * system_views.sql
+ */
+ tupdesc = CreateTemplateTupleDesc(3, false);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 1, "name",
+ TEXTOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 2, "gmt_offset",
+ INTERVALOID, -1, 0);
+ TupleDescInitEntry(tupdesc, (AttrNumber) 3, "is_dst",
+ BOOLOID, -1, 0);
+
+ funcctx->tuple_desc = BlessTupleDesc(tupdesc);
+ MemoryContextSwitchTo(oldcontext);
+ }
+
+ /* stuff done on every call of the function */
+ funcctx = SRF_PERCALL_SETUP();
+ pindex = (int *) funcctx->user_fctx;
+
+ while (*pindex < szdatetktbl && datetktbl[*pindex].type != TZ
+ && datetktbl[*pindex].type != DTZ)
+ (*pindex)++;
+
+ if (*pindex == szdatetktbl)
+ SRF_RETURN_DONE(funcctx);
+
+ MemSet(nulls, 0, sizeof(nulls));
+ MemSet(&tm, 0, sizeof(struct pg_tm));
+
+ /*
+ * Note that the token is not necessarily null-terminated
+ */
+ strncpy(buffer, datetktbl[*pindex].token, TOKMAXLEN);
+ buffer[TOKMAXLEN] = '\0';
+ values[0] = DirectFunctionCall1(textin, CStringGetDatum(buffer));
+
+ tm.tm_min = (-1) * FROMVAL(&datetktbl[*pindex]);
+ resInterval = (Interval *) palloc(sizeof(Interval));
+ tm2interval(&tm, 0, resInterval);
+ values[1] = IntervalPGetDatum(resInterval);
+
+ Assert(datetktbl[*pindex].type == DTZ ||
+ datetktbl[*pindex].type == TZ);
+ values[2] = BoolGetDatum(datetktbl[*pindex].type == DTZ);
+
+ (*pindex)++;
+
+ tuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
+ result = HeapTupleGetDatum(tuple);
+ SRF_RETURN_NEXT(funcctx, result);
+ }
/*
* Calendar time to Julian date conversions.
***************
*** 3005,3018 ****
strncmp(lowtoken, datecache[field]->token, TOKMAXLEN) == 0)
tp = datecache[field];
else
! {
! tp = NULL;
! if (Australian_timezones)
! tp = datebsearch(lowtoken, australian_datetktbl,
! australian_szdatetktbl);
! if (!tp)
! tp = datebsearch(lowtoken, datetktbl, szdatetktbl);
! }
datecache[field] = tp;
if (tp == NULL)
{
--- 2827,2833 ----
strncmp(lowtoken, datecache[field]->token, TOKMAXLEN) == 0)
tp = datecache[field];
else
! tp = datebsearch(lowtoken, datetktbl, szdatetktbl);
datecache[field] = tp;
if (tp == NULL)
{
***************
*** 4083,4103 ****
} /* EncodeInterval() */
- /* GUC assign_hook for australian_timezones */
- bool
- ClearDateCache(bool newval, bool doit, GucSource source)
- {
- int i;
-
- if (doit)
- {
- for (i = 0; i < MAXDATEFIELDS; i++)
- datecache[i] = NULL;
- }
-
- return true;
- }
-
/*
* We've been burnt by stupid errors in the ordering of the datetkn tables
* once too often. Arrange to check them during postmaster start.
--- 3898,3903 ----
***************
*** 4132,4139 ****
ok &= CheckDateTokenTable("datetktbl", datetktbl, szdatetktbl);
ok &= CheckDateTokenTable("deltatktbl", deltatktbl, szdeltatktbl);
- ok &= CheckDateTokenTable("australian_datetktbl",
- australian_datetktbl,
- australian_szdatetktbl);
return ok;
}
--- 3932,3936 ----
diff -cNr cvs/pgsql/src/backend/utils/misc/guc.c cvs.build/pgsql/src/backend/utils/misc/guc.c
*** cvs/pgsql/src/backend/utils/misc/guc.c 2006-07-10 18:53:26.000000000 +0200
--- cvs.build/pgsql/src/backend/utils/misc/guc.c 2006-07-13 18:06:01.000000000 +0200
***************
*** 172,179 ****
bool SQL_inheritance = true;
- bool Australian_timezones = false;
-
bool Password_encryption = true;
bool default_with_oids = false;
--- 172,177 ----
***************
*** 189,194 ****
--- 187,193 ----
char *HbaFileName;
char *IdentFileName;
char *external_pid_file;
+ char *timezone_abbreviations;
int tcp_keepalives_idle;
int tcp_keepalives_interval;
***************
*** 816,830 ****
true, NULL, NULL
},
{
- {"australian_timezones", PGC_USERSET, CLIENT_CONN_LOCALE,
- gettext_noop("Interprets ACST, CST, EST, and SAT as Australian time zones."),
- gettext_noop("Otherwise they are interpreted as North/South American "
- "time zones and Saturday.")
- },
- &Australian_timezones,
- false, ClearDateCache, NULL
- },
- {
{"password_encryption", PGC_USERSET, CONN_AUTH_SECURITY,
gettext_noop("Encrypt passwords."),
gettext_noop("When a password is specified in CREATE USER or "
--- 815,820 ----
***************
*** 2086,2091 ****
--- 2076,2089 ----
&timezone_string,
"UNKNOWN", assign_timezone, show_timezone
},
+ {
+ {"timezone_abbreviations", PGC_SIGHUP, CLIENT_CONN_LOCALE,
+ gettext_noop("Selects a file of timezone abbreviations"),
+ NULL,
+ },
+ &timezone_abbreviations,
+ "Default", NULL, NULL
+ },
{
{"transaction_isolation", PGC_USERSET, CLIENT_CONN_STATEMENT,
diff -cNr cvs/pgsql/src/backend/utils/misc/Makefile cvs.build/pgsql/src/backend/utils/misc/Makefile
*** cvs/pgsql/src/backend/utils/misc/Makefile 2006-03-24 08:10:37.000000000 +0100
--- cvs.build/pgsql/src/backend/utils/misc/Makefile 2006-07-13 18:06:01.000000000 +0200
***************
*** 14,20 ****
override CPPFLAGS := -I$(srcdir) $(CPPFLAGS)
! OBJS = guc.o help_config.o pg_rusage.o ps_status.o superuser.o
# This location might depend on the installation directories. Therefore
# we can't subsitute it into pg_config.h.
--- 14,20 ----
override CPPFLAGS := -I$(srcdir) $(CPPFLAGS)
! OBJS = guc.o help_config.o pg_rusage.o ps_status.o superuser.o tzparser.o
# This location might depend on the installation directories. Therefore
# we can't subsitute it into pg_config.h.
diff -cNr cvs/pgsql/src/backend/utils/misc/postgresql.conf.sample cvs.build/pgsql/src/backend/utils/misc/postgresql.conf.sample
*** cvs/pgsql/src/backend/utils/misc/postgresql.conf.sample 2006-07-10 18:53:26.000000000 +0200
--- cvs.build/pgsql/src/backend/utils/misc/postgresql.conf.sample 2006-07-13 18:06:01.000000000 +0200
***************
*** 380,386 ****
#datestyle = 'iso, mdy'
#timezone = unknown # actually, defaults to TZ
# environment setting
! #australian_timezones = off
#extra_float_digits = 0 # min -15, max 2
#client_encoding = sql_ascii # actually, defaults to database
# encoding
--- 380,392 ----
#datestyle = 'iso, mdy'
#timezone = unknown # actually, defaults to TZ
# environment setting
! #timezone_abbreviations = 'Default' # select the set of preferred timezone
! # abbreviations. Currently, there are
! # Default
! # Australia
! # India
! # However you can also create your own
! # file in shared/timezone/sets/.
#extra_float_digits = 0 # min -15, max 2
#client_encoding = sql_ascii # actually, defaults to database
# encoding
diff -cNr cvs/pgsql/src/backend/utils/misc/tzparser.c cvs.build/pgsql/src/backend/utils/misc/tzparser.c
*** cvs/pgsql/src/backend/utils/misc/tzparser.c 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/backend/utils/misc/tzparser.c 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,409 ----
+ /*-------------------------------------------------------------------------
+ *
+ * tzparser.c
+ * Functions for parsing the timezone offset files
+ *
+ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ *
+ * IDENTIFICATION
+ *
+ *-------------------------------------------------------------------------
+ */
+
+ #include "postgres.h"
+
+ #include "miscadmin.h"
+ #include "storage/fd.h"
+ #include "utils/guc.h"
+ #include "utils/memutils.h"
+ #include "utils/datetime.h"
+ #include "utils/tzparser.h"
+
+ static void setErrorStr(char *fmt, ...);
+
+ static char *tzGetLine(const char *filename, int lineno, FILE *f);
+ static int splitTzLine(const char *filename, int lineno,
+ char *line, tzEntry *tzentry);
+ static int transformTzEntry(tzList tzentry);
+ static tzList addToList(tzList base, tzEntry *entry, bool override);
+
+ static tzList tzFileParse(FILE *f, char *filename, int depth, tzList base);
+ static tzList ParseTzFile(const char *tzSetFile, int depth, tzList base);
+
+ static char *errorStr;
+ static MemoryContext TimeZoneMemoryContext;
+ #define TZBUFSIZE 200
+
+ static void
+ setErrorStr(char *fmt, ...)
+ {
+ size_t size;
+ va_list args;
+
+ /*
+ * Maximal length here is the "Line too long" message from tzGetLine(). In
+ * this case, TZBUFSIZE is used up by the whole buffer already, and the
+ * filename and the line number have to fit in the 200 extra bytes.
+ */
+ size = strlen(fmt) + TZBUFSIZE + 200;
+ errorStr = (char *) palloc(size);
+ va_start(args,fmt);
+ vsnprintf(errorStr, size, fmt, args);
+ va_end(args);
+ }
+
+ static int
+ transformTzEntry(tzList tzentry)
+ {
+ char *p;
+ if (tzentry->offset % 900 != 0)
+ {
+ setErrorStr("Time zone offsets must be multiples of 900s (15 min) "
+ "in file %s, line %d: %d",
+ tzentry->filename, tzentry->lineno, tzentry->offset);
+ return -1;
+ }
+ elog(DEBUG1, "Adding tz abbrev: %s, offset: %d, is_dst: %s",
+ tzentry->abbrev, tzentry->offset / 900,
+ tzentry->is_dst ? "yes" : "no");
+ /* put timezone abbrev to lowercase */
+ p = tzentry->abbrev;
+ while (*p)
+ {
+ *p = (char) pg_tolower((int)*p);
+ p++;
+ }
+ return 0;
+ }
+
+
+ static char *
+ tzGetLine(const char *filename, int lineno, FILE *f) {
+ static char tzbuf[TZBUFSIZE];
+ int wsidx;
+
+ if (fgets(tzbuf, TZBUFSIZE, f) == NULL)
+ return NULL;
+
+ if (strlen(tzbuf) == TZBUFSIZE-1)
+ {
+ /* the line is too long */
+ /* fgets read to the maximum */
+ /* continue reading until eof or newline */
+ while (!feof(f))
+ {
+ if (getc(f) == '\n')
+ break;
+ }
+ setErrorStr("Line too long in %s on line %d: %s...",
+ filename, lineno, tzbuf);
+ return NULL;
+ }
+
+ /* skip over whitespace */
+ wsidx = 0;
+ while (tzbuf[wsidx] == '\t' || tzbuf[wsidx] == ' ')
+ wsidx++;
+
+ if (tzbuf[wsidx] == '\n')
+ /* empty line */
+ return NULL;
+
+ if (tzbuf[wsidx] == '#')
+ /* this is a comment line */
+ return NULL;
+
+ return tzbuf;
+ }
+
+ #define WHITESPACE " \t\n"
+ static int
+ splitTzLine(const char *filename, int lineno, char *line, tzEntry *tzentry)
+ {
+ char *abbrev;
+ char *offset;
+ char *offset_endptr;
+ char *remain;
+ char *is_dst;
+
+ abbrev = strtok(line, WHITESPACE);
+ if (!abbrev)
+ {
+ setErrorStr("No time zone abbreviation in file %s line %d",
+ filename, lineno);
+ return -1;
+ }
+
+ offset = strtok(NULL, WHITESPACE);
+ if (!offset)
+ {
+ setErrorStr("No time zone offset definition in file %s line %d "
+ "(time zone abbrev %s)", filename, lineno, abbrev);
+ return -1;
+ }
+
+ tzentry->next = NULL;
+ tzentry->lineno = lineno;
+ tzentry->filename = filename;
+ tzentry->abbrev = abbrev;
+ tzentry->offset = strtod(offset, &offset_endptr);
+ tzentry->is_dst = false;
+ if (tzentry->offset == 0 && offset == offset_endptr)
+ {
+ setErrorStr("Invalid number for offset in file %s line %d: %s",
+ filename, lineno, offset);
+ return -1;
+ }
+
+ is_dst = strtok(NULL, WHITESPACE);
+ if (is_dst && strcasecmp(is_dst, "D") == 0)
+ {
+ tzentry->is_dst = true;
+ remain = strtok(NULL, WHITESPACE);
+ }
+ else
+ /* there was no 'D' dst specifier */
+ remain = is_dst;
+
+ if (!remain)
+ /* no more non-whitespace chars */
+ return 0;
+
+ if (remain[0] == '#')
+ return 0;
+ else
+ {
+ setErrorStr("Invalid string after time zone definition %s "
+ "in file %s line %d: %s",
+ abbrev, filename, lineno, remain);
+ return -1;
+ }
+ }
+
+ static tzList
+ addToList(tzList base, tzEntry *entry, bool override)
+ {
+ tzEntry* newRecord;
+ newRecord = (tzEntry*) palloc(sizeof(tzEntry));
+ memcpy(newRecord, entry, sizeof(tzEntry));
+ newRecord->abbrev = pstrdup(entry->abbrev);
+
+ if (!base || strcmp(base->abbrev, entry->abbrev) > 0)
+ {
+ newRecord->next = base;
+ base = newRecord;
+ }
+ else
+ {
+ tzList p = base;
+ while (p->next != NULL && strcmp(p->next->abbrev,
+ newRecord->abbrev) < 0)
+ p = p->next;
+ if (p->next && strcmp(p->next->abbrev, newRecord->abbrev) == 0)
+ {
+ if (p->next->offset == newRecord->offset
+ && p->next->is_dst == newRecord->is_dst)
+ {
+ /* ok, same abbrev but also same offset, no need to complain */
+ return base;
+ }
+ else if (override)
+ {
+ /* same abbrev but something is different, override */
+ elog(DEBUG1, "Overriding existing timezone abbreviation %s "
+ "with new definition from %s, line %d",
+ newRecord->abbrev, newRecord->filename,
+ newRecord->lineno);
+ newRecord->next = p->next->next;
+ p->next = newRecord;
+ return base;
+ }
+ else
+ {
+ /* same abbrev but something is different, complain */
+ setErrorStr("Time zone abbreviation %s is not unique "
+ "(defined in %s line %d and in %s line %d)",
+ newRecord->abbrev,
+ p->next->filename, p->next->lineno,
+ newRecord->filename, newRecord->lineno);
+ return NULL;
+ }
+ }
+ newRecord->next = p->next;
+ p->next = newRecord;
+ }
+
+ return base;
+ }
+
+
+ static tzList
+ tzFileParse(FILE *f, char *filename, int depth, tzList base)
+ {
+ char *line;
+ tzEntry tzentry;
+ int lineno = 0;
+ bool override = false;
+
+ while(!feof(f)) {
+ lineno++;
+ line = tzGetLine(filename, lineno, f);
+ /*
+ * line is NULL if
+ * - line is too long (error: errorStr set)
+ * - line is empty (no error)
+ * - line is commented (no error)
+ * - at eof (no error, but return successfully)
+ */
+ if (ferror(f))
+ {
+ setErrorStr("Error reading from timezone file %s", filename);
+ return NULL;
+ }
+ if (line)
+ {
+ if (strncasecmp(line, "@INCLUDE", strlen("@INCLUDE")) == 0)
+ {
+ char* includeFile = pstrdup(line + strlen("@INCLUDE"));
+ includeFile = strtok(includeFile, WHITESPACE);
+ if (!includeFile || !*includeFile)
+ {
+ setErrorStr("@INCLUDE without filename in file %s "
+ "on line %d", filename, lineno);
+ return NULL;
+ }
+ if (!(base = ParseTzFile(includeFile, depth + 1, base)))
+ return NULL;
+ continue;
+ }
+ if (strncasecmp(line, "@OVERRIDE", strlen("@OVERRIDE")) == 0)
+ {
+ override = true;
+ continue;
+ }
+ if (splitTzLine(filename, lineno, line, &tzentry) != 0)
+ return NULL;
+ if (transformTzEntry(&tzentry) != 0)
+ return NULL;
+ if (!(base = addToList(base, &tzentry, override)))
+ return NULL;
+ }
+ else
+ if (errorStr)
+ return NULL;
+ }
+
+ return base;
+ }
+
+ /*
+ * This function parses a timezone abbreviation set. It basically just
+ *
+ * - opens the file
+ * - calls tzFileParse
+ * -> note that tzFileParse can call back to this function again if it
+ * encounters an @INCLUDE directive.
+ *
+ * In case of an error it will not elog() out but just return a NULL
+ * pointer. errorStr will be set appropriately.
+ */
+ static tzList
+ ParseTzFile(const char *tzSet, int depth, tzList List)
+ {
+ FILE *tzFile;
+ char *filename;
+ char share_path[MAXPGPATH];
+ size_t size;
+
+ /*
+ * The maximal recursion depth is a pretty arbitrary setting.
+ * It is hard to imagine that someone needs more than 3 levels so stick
+ * with this conservative setting until someone complains.
+ */
+ if (depth > 3)
+ {
+ setErrorStr("Maximal recursion depth reached");
+ return NULL;
+ }
+
+ get_share_path(my_exec_path, share_path);
+ size = strlen(share_path)
+ + strlen("/timezone/tznames/sets/")
+ + strlen(tzSet) + 1;
+ if (size > MAXPGPATH)
+ {
+ setErrorStr("Path to files containing time zone names is too long");
+ return NULL;
+ }
+ filename = (char *) palloc(size);
+ strcpy(filename, share_path);
+ strcat(filename, "/timezone/tznames/sets/");
+ strcat(filename, tzSet);
+ tzFile = AllocateFile(filename, "r");
+ if (!tzFile)
+ {
+ setErrorStr("Error opening file %s for reading", filename);
+ return NULL;
+ }
+ List = tzFileParse(tzFile, filename, depth, List);
+ FreeFile(tzFile);
+ /*
+ * in case of an error, List == NULL
+ */
+ return List;
+ }
+
+ void
+ load_tzoffsets(GucContext context)
+ {
+ MemoryContext ParseTimeZoneMemoryContext;
+ MemoryContext oldMemCtx;
+ tzList List;
+
+ Assert(context == PGC_POSTMASTER || context == PGC_SIGHUP);
+ errorStr = NULL;
+
+ ParseTimeZoneMemoryContext = AllocSetContextCreate(TopMemoryContext,
+ "ParseTimeZoneHeapMemory",
+ ALLOCSET_SMALL_MINSIZE,
+ ALLOCSET_SMALL_INITSIZE,
+ ALLOCSET_SMALL_MAXSIZE);
+ oldMemCtx = MemoryContextSwitchTo(ParseTimeZoneMemoryContext);
+ List = ParseTzFile(timezone_abbreviations, 0, NULL);
+ /*
+ * errorStr still lives in the ParseTimeZoneMemoryContext, we cannot
+ * free it immediately here.
+ */
+ if (List) {
+ /* ok, no errors, apply values */
+ if (context == PGC_SIGHUP)
+ MemoryContextReset(TimeZoneMemoryContext);
+ else
+ TimeZoneMemoryContext = AllocSetContextCreate(TopMemoryContext,
+ "TimeZoneHeapMemory",
+ ALLOCSET_SMALL_MINSIZE,
+ ALLOCSET_SMALL_INITSIZE,
+ ALLOCSET_SMALL_MAXSIZE);
+ MemoryContextSwitchTo(TimeZoneMemoryContext);
+ InitTimeZones(List);
+ elog(DEBUG1, "Timezone offsets successfully loaded");
+ }
+ else
+ {
+ Assert(errorStr != NULL);
+ if (context == PGC_SIGHUP)
+ {
+ elog(WARNING, "Error reading timezone offsets: %s", errorStr);
+ elog(WARNING, "Timezone offsets have not been updated.");
+ }
+ else
+ /* context == PGC_POSTMASTER */
+ elog(ERROR, "Error reading timezone offsets: %s", errorStr);
+ errorStr = NULL;
+ }
+ MemoryContextSwitchTo(oldMemCtx);
+ MemoryContextDelete(ParseTimeZoneMemoryContext);
+ }
+
diff -cNr cvs/pgsql/src/include/catalog/pg_proc.h cvs.build/pgsql/src/include/catalog/pg_proc.h
*** cvs/pgsql/src/include/catalog/pg_proc.h 2006-07-10 18:53:26.000000000 +0200
--- cvs.build/pgsql/src/include/catalog/pg_proc.h 2006-07-13 18:06:01.000000000 +0200
***************
*** 3717,3722 ****
--- 3717,3724 ----
DESCR("get the prepared statements for this session");
DATA(insert OID = 2511 ( pg_cursor PGNSP PGUID 12 f f t t s 0 2249 "" _null_ _null_ _null_ pg_cursor - _null_ ));
DESCR("get the open cursors for this session");
+ DATA(insert OID = 2599 ( pg_timezonename PGNSP PGUID 12 f f t t s 0 2249 "" _null_ _null_ _null_ pg_timezonename - _null_ ));
+ DESCR("get the available time zone names");
/* non-persistent series generator */
DATA(insert OID = 1066 ( generate_series PGNSP PGUID 12 f f t t v 3 23 "23 23 23" _null_ _null_ _null_ generate_series_step_int4 - _null_ ));
diff -cNr cvs/pgsql/src/include/utils/datetime.h cvs.build/pgsql/src/include/utils/datetime.h
*** cvs/pgsql/src/include/utils/datetime.h 2006-06-11 20:21:39.000000000 +0200
--- cvs.build/pgsql/src/include/utils/datetime.h 2006-07-13 18:06:01.000000000 +0200
***************
*** 20,25 ****
--- 20,26 ----
#include <math.h>
#include "utils/timestamp.h"
+ #include "utils/tzparser.h"
/* ----------------------------------------------------------------
***************
*** 266,272 ****
#define DTERR_INTERVAL_OVERFLOW (-4)
#define DTERR_TZDISP_OVERFLOW (-5)
!
extern void GetCurrentDateTime(struct pg_tm * tm);
extern void GetCurrentTimeUsec(struct pg_tm * tm, fsec_t *fsec, int *tzp);
extern void j2date(int jd, int *year, int *month, int *day);
--- 267,274 ----
#define DTERR_INTERVAL_OVERFLOW (-4)
#define DTERR_TZDISP_OVERFLOW (-5)
! extern int InitTimeZones(tzList tze);
! extern Datum pg_timezonename(PG_FUNCTION_ARGS);
extern void GetCurrentDateTime(struct pg_tm * tm);
extern void GetCurrentTimeUsec(struct pg_tm * tm, fsec_t *fsec, int *tzp);
extern void j2date(int jd, int *year, int *month, int *day);
diff -cNr cvs/pgsql/src/include/utils/guc.h cvs.build/pgsql/src/include/utils/guc.h
*** cvs/pgsql/src/include/utils/guc.h 2006-05-15 22:59:45.000000000 +0200
--- cvs.build/pgsql/src/include/utils/guc.h 2006-07-13 18:06:01.000000000 +0200
***************
*** 132,137 ****
--- 132,138 ----
extern char *HbaFileName;
extern char *IdentFileName;
extern char *external_pid_file;
+ extern char *timezone_abbreviations;
extern int tcp_keepalives_idle;
extern int tcp_keepalives_interval;
diff -cNr cvs/pgsql/src/include/utils/tzparser.h cvs.build/pgsql/src/include/utils/tzparser.h
*** cvs/pgsql/src/include/utils/tzparser.h 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/include/utils/tzparser.h 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,37 ----
+ /*-------------------------------------------------------------------------
+ *
+ * tzparser.h
+ * Timezone offset file parsing definitions.
+ *
+ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *
+ *-------------------------------------------------------------------------
+ */
+
+ #ifndef PG_TZPARSER_H
+ #define PG_TZPARSER_H
+
+ #include "utils/guc.h"
+
+ struct tzEntry {
+ char *abbrev;
+ int offset;
+ int lineno;
+ const char *filename;
+ bool is_dst;
+ struct tzEntry *next;
+ };
+
+ /*
+ * tzList is actually just a tzEntry* but it will be used whenever the
+ * semantical meaning is "base pointer to linked list".
+ */
+ typedef struct tzEntry tzEntry;
+ typedef struct tzEntry * tzList;
+
+ void load_tzoffsets(GucContext context);
+
+ #endif /* PG_TZPARSER_H */
diff -cNr cvs/pgsql/src/test/regress/expected/horology.out cvs.build/pgsql/src/test/regress/expected/horology.out
*** cvs/pgsql/src/test/regress/expected/horology.out 2006-07-10 18:53:27.000000000 +0200
--- cvs.build/pgsql/src/test/regress/expected/horology.out 2006-07-13 18:06:01.000000000 +0200
***************
*** 1,8 ****
--
-- HOROLOGY
--
- -- needed so tests pass even in Australia
- SET australian_timezones = 'off';
SET DateStyle = 'Postgres, MDY';
--
-- Test various input formats
--- 1,6 ----
diff -cNr cvs/pgsql/src/test/regress/expected/timestamp.out cvs.build/pgsql/src/test/regress/expected/timestamp.out
*** cvs/pgsql/src/test/regress/expected/timestamp.out 2006-07-10 18:53:27.000000000 +0200
--- cvs.build/pgsql/src/test/regress/expected/timestamp.out 2006-07-13 18:06:01.000000000 +0200
***************
*** 1,8 ****
--
-- TIMESTAMP
--
- -- needed so tests pass even in Australia
- SET australian_timezones = 'off';
CREATE TABLE TIMESTAMP_TBL ( d1 timestamp(2) without time zone);
-- Shorthand values
-- Not directly usable for regression testing since these are not constants.
--- 1,6 ----
diff -cNr cvs/pgsql/src/test/regress/expected/timestamptz.out cvs.build/pgsql/src/test/regress/expected/timestamptz.out
*** cvs/pgsql/src/test/regress/expected/timestamptz.out 2006-07-10 18:53:27.000000000 +0200
--- cvs.build/pgsql/src/test/regress/expected/timestamptz.out 2006-07-13 18:06:01.000000000 +0200
***************
*** 1,8 ****
--
-- TIMESTAMPTZ
--
- -- needed so tests pass even in Australia
- SET australian_timezones = 'off';
CREATE TABLE TIMESTAMPTZ_TBL ( d1 timestamp(2) with time zone);
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
INSERT INTO TIMESTAMPTZ_TBL VALUES ('current');
--- 1,6 ----
diff -cNr cvs/pgsql/src/test/regress/sql/horology.sql cvs.build/pgsql/src/test/regress/sql/horology.sql
*** cvs/pgsql/src/test/regress/sql/horology.sql 2006-04-17 23:05:02.000000000 +0200
--- cvs.build/pgsql/src/test/regress/sql/horology.sql 2006-07-13 18:06:01.000000000 +0200
***************
*** 1,8 ****
--
-- HOROLOGY
--
- -- needed so tests pass even in Australia
- SET australian_timezones = 'off';
SET DateStyle = 'Postgres, MDY';
--
--- 1,6 ----
diff -cNr cvs/pgsql/src/test/regress/sql/timestamp.sql cvs.build/pgsql/src/test/regress/sql/timestamp.sql
*** cvs/pgsql/src/test/regress/sql/timestamp.sql 2006-07-10 18:53:27.000000000 +0200
--- cvs.build/pgsql/src/test/regress/sql/timestamp.sql 2006-07-13 18:06:01.000000000 +0200
***************
*** 1,8 ****
--
-- TIMESTAMP
--
- -- needed so tests pass even in Australia
- SET australian_timezones = 'off';
CREATE TABLE TIMESTAMP_TBL ( d1 timestamp(2) without time zone);
--- 1,6 ----
diff -cNr cvs/pgsql/src/test/regress/sql/timestamptz.sql cvs.build/pgsql/src/test/regress/sql/timestamptz.sql
*** cvs/pgsql/src/test/regress/sql/timestamptz.sql 2006-07-10 18:53:27.000000000 +0200
--- cvs.build/pgsql/src/test/regress/sql/timestamptz.sql 2006-07-13 18:06:01.000000000 +0200
***************
*** 1,8 ****
--
-- TIMESTAMPTZ
--
- -- needed so tests pass even in Australia
- SET australian_timezones = 'off';
CREATE TABLE TIMESTAMPTZ_TBL ( d1 timestamp(2) with time zone);
--- 1,6 ----
diff -cNr cvs/pgsql/src/timezone/Makefile cvs.build/pgsql/src/timezone/Makefile
*** cvs/pgsql/src/timezone/Makefile 2005-12-09 22:19:36.000000000 +0100
--- cvs.build/pgsql/src/timezone/Makefile 2006-07-13 18:06:01.000000000 +0200
***************
*** 35,45 ****
--- 35,47 ----
install: all installdirs
./zic -d '$(DESTDIR)$(datadir)/timezone' $(TZDATAFILES)
+ $(MAKE) -C tznames $@
installdirs:
$(mkinstalldirs) '$(DESTDIR)$(datadir)'
uninstall:
+ $(MAKE) -C tznames $@
rm -rf '$(DESTDIR)$(datadir)/timezone'
clean distclean maintainer-clean:
diff -cNr cvs/pgsql/src/timezone/README cvs.build/pgsql/src/timezone/README
*** cvs/pgsql/src/timezone/README 2004-10-24 17:01:54.000000000 +0200
--- cvs.build/pgsql/src/timezone/README 2006-07-13 18:06:01.000000000 +0200
***************
*** 11,13 ****
--- 11,21 ----
Since time zone rules change frequently in some parts of the world,
we should endeavor to update the data files before each PostgreSQL
release.
+
+ At each update, we should check if time zone offsets have
+ changed. Just search for the current or previous year and see
+ what has changed. Sometimes a country changes its time zone
+ offsets, like for example Georgia in 2004. Just grepping in the
+ zic database files for 2004 makes us spot such a change. Then the
+ file(s) in tznames/template in in tznames/set should be updated.
+
diff -cNr cvs/pgsql/src/timezone/tznames/Makefile cvs.build/pgsql/src/timezone/tznames/Makefile
*** cvs/pgsql/src/timezone/tznames/Makefile 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/Makefile 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,30 ----
+ #-------------------------------------------------------------------------
+ #
+ # Makefile
+ # Makefile for the timezone names
+
+ # IDENTIFICATION
+ #
+ #-------------------------------------------------------------------------
+
+ subdir = src/timezone/tznames
+ top_builddir = ../../..
+ include $(top_builddir)/src/Makefile.global
+
+ TZNAMES_TEMPLATES := Africa.txt America.txt Antarctica.txt Asia.txt Atlantic.txt Australia.txt Etc.txt Europe.txt Indian.txt Pacific.txt
+ TZNAMES_TEMPLATES_FILES := $(TZNAMES_TEMPLATES:%=$(srcdir)/templates/%)
+
+ TZNAMES_SETS := Default Australia India Israel
+ TZNAMES_SETS_FILES := $(TZNAMES_SETS:%=$(srcdir)/sets/%)
+
+ install: installdirs
+ $(INSTALL_DATA) $(TZNAMES_TEMPLATES_FILES) '$(DESTDIR)$(datadir)/timezone/tznames/templates'
+ $(INSTALL_DATA) $(TZNAMES_SETS_FILES) '$(DESTDIR)$(datadir)/timezone/tznames/sets'
+
+ installdirs:
+ $(mkinstalldirs) '$(DESTDIR)$(datadir)/timezone/tznames/templates'
+ $(mkinstalldirs) '$(DESTDIR)$(datadir)/timezone/tznames/sets'
+
+ uninstall:
+ rm -rf '$(DESTDIR)$(datadir)/timezone/tznames'
+
diff -cNr cvs/pgsql/src/timezone/tznames/sets/Australia cvs.build/pgsql/src/timezone/tznames/sets/Australia
*** cvs/pgsql/src/timezone/tznames/sets/Australia 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/sets/Australia 2006-07-13 18:06:35.000000000 +0200
***************
*** 0 ****
--- 1,35 ----
+ # Time zone configuration file for set "Australia"
+
+ # In order to use this file, you need to set
+ #
+ # timezone_abbreviations = 'Australia'
+ #
+ # in your postgresql.conf configuration file.
+
+
+ # include the default set
+ @INCLUDE Default
+
+ # most timezones are already defined in the default set. With the OVERRIDE
+ # option, PostgreSQL will use the new definitions instead of throwing an error
+ # in case of a conflict.
+ @OVERRIDE
+
+ ACST 34200 # Central Australia Standard Time (not in zic)
+ CST 34200 # Central Standard Time (Australia)
+ # (Australia/Adelaide)
+ # (Australia/Broken_Hill)
+ EAST 36000 # East Australian Standard Time (Australia) (not in zic)
+ EST 36000 # Eastern Standard Time (Australia)
+ # (Australia/Currie)
+ # (Australia/Hobart)
+ # (Australia/Melbourne)
+ # (Australia/Sydney)
+ # (Australia/Currie)
+ # (Australia/Hobart)
+ # (Australia/Melbourne)
+ # (Australia/Sydney)
+ SAT 34200 # South Australian Standard Time (not in zic)
+ WST 28800 # Western Standard Time (Australia)
+ # (Antarctica/Casey)
+ # (Australia/Perth)
diff -cNr cvs/pgsql/src/timezone/tznames/sets/Default cvs.build/pgsql/src/timezone/tznames/sets/Default
*** cvs/pgsql/src/timezone/tznames/sets/Default 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/sets/Default 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,744 ----
+ # Time zone configuration file for set "Default"
+
+ # In order to use this file, you need to set
+ #
+ # timezone_abbreviations = 'Default'
+ #
+ # in your postgresql.conf configuration file.
+
+ # This file contains all basic time zones. Most people will be happy with just
+ # this file, others might want to redefine or override time zone abbreviations
+ # from this file. Look at the other sets in this directory to see how to do
+ # this (take a look at the set for Australia for example).
+ #
+ # Basically you can include another set with
+ #
+ # @INCLUDE <other file>
+ #
+ # Most often you will want to include the default set. To do this, write
+ #
+ # @INCLUDE Default
+ #
+ # Normally if PostgreSQL finds out that you have used the same time zone
+ # abbreviation twice with different offsets it will raise an error. You can
+ # however also make one set override the other, to do this, just set
+ #
+ # @OVERRIDE
+ #
+ # in the set that should override other sets. Note that the override property
+ # does not propagate to included files.
+
+ # The basic format for this file is:
+ #
+ # XDT 7200 D # Your comment here
+ # XST -3600 # Your comment here
+ #
+ # That means that the timezone abbreviation XDT (which does not exist in
+ # reality) has an offset of 7200 seconds to GMT and is a Daylight Savings Time
+ # because there is a 'D' after the offset. XST is no Daylight Savings Time and
+ # has an offset of -3600s to GMT.
+ #
+ # Normally you would never have to specify these lines for yourself. Just look
+ # into ../templates/ to find most of the existing time zone offsets already
+ # defined. You just have to copy them over into your set file.
+
+ # If you think that a time zone abbreviation is missing here, please report it
+ # to <pgsql-hackers@postgresql.org>. It can then be included in future
+ # releases. For the time being you can always add your own definitions.
+
+
+ #################### AFRICA ####################
+
+ EAT 10800 # East Africa Time
+ # (Africa/Addis_Ababa)
+ # (Africa/Asmera)
+ # (Africa/Dar_es_Salaam)
+ # (Africa/Djibouti)
+ # (Africa/Kampala)
+ # (Africa/Khartoum)
+ # (Africa/Mogadishu)
+ # (Africa/Nairobi)
+ # (Indian/Antananarivo)
+ # (Indian/Comoro)
+ # (Indian/Mayotte)
+ WAT 3600 # West Africa Time
+ # (Africa/Bangui)
+ # (Africa/Brazzaville)
+ # (Africa/Douala)
+ # (Africa/Kinshasa)
+ # (Africa/Lagos)
+ # (Africa/Libreville)
+ # (Africa/Luanda)
+ # (Africa/Malabo)
+ # (Africa/Ndjamena)
+ # (Africa/Niamey)
+ # (Africa/Porto-Novo)
+ # (Africa/Windhoek)
+
+ #################### AMERICA ####################
+
+ # Acre time is sometimes called Acre Standard Time (AST) which leads to a
+ # conflict with AST (see below at AST)
+ ACT -18000 # Acre Time
+ # (America/Eirunepe)
+ # (America/Rio_Branco)
+ ACST -14400 D # Acre Summer Time
+ # (America/Eirunepe)
+ # (America/Rio_Branco)
+ AKDT -28800 D # Alaska Daylight Time
+ # (America/Anchorage)
+ # (America/Juneau)
+ # (America/Nome)
+ # (America/Yakutat)
+ AKST -32400 # Alaska Standard Time
+ # (America/Anchorage)
+ # (America/Juneau)
+ # (America/Nome)
+ # (America/Yakutat)
+ ART -10800 # Argentina Time (not in zic)
+ BOT -14400 # Bolivia Time
+ # (America/La_Paz)
+ BRA -10800 # Brazil Time (not in zic)
+ BRST -7200 D # Brasil Summer Time
+ # (America/Sao_Paulo)
+ BRT -10800 # Brasil Time
+ # (America/Araguaina)
+ # (America/Bahia)
+ # (America/Belem)
+ # (America/Fortaleza)
+ # (America/Maceio)
+ # (America/Recife)
+ # (America/Sao_Paulo)
+ COT -18000 # Columbia Time (not in zic)
+ # CONFLICT! CDT is not unique
+ # Other timezones:
+ # - CDT: Mexico Central Daylight Time (America)
+ # - CDT: Cuba Central Daylight Time (America)
+ # - CDT: Canada Central Daylight Time (America)
+ CDT -18000 D # Central Daylight Time
+ # (America/Cancun)
+ # (America/Chicago)
+ # (America/Menominee)
+ # (America/Merida)
+ # (America/Mexico_City)
+ # (America/Monterrey)
+ # (America/North_Dakota/Center)
+ # (America/Rainy_River)
+ # (America/Rankin_Inlet)
+ # (America/Winnipeg)
+ CLST -10800 D # Chile Summer Time
+ # (America/Santiago)
+ # (Antarctica/Palmer)
+ CLT -14400 # Chile Time
+ # (America/Santiago)
+ # (Antarctica/Palmer)
+ # CONFLICT! CST is not unique
+ # Other timezones:
+ # - CST: Central Standard Time (Australia)
+ # - CST: Cuba Central Standard Time (America)
+ CST -21600 # Central Standard Time (America)
+ # (America/Cancun)
+ # (America/Chicago)
+ # (America/Menominee)
+ # (America/Merida)
+ # (America/Mexico_City)
+ # (America/Monterrey)
+ # (America/North_Dakota/Center)
+ # (America/Rainy_River)
+ # (America/Rankin_Inlet)
+ # (America/Regina)
+ # (America/Swift_Current)
+ # (America/Winnipeg)
+ EDT -14400 D # Eastern Daylight Saving Time
+ # (America/Detroit)
+ # (America/Grand_Turk)
+ # (America/Indiana/Indianapolis)
+ # (America/Indiana/Knox)
+ # (America/Indiana/Marengo)
+ # (America/Indiana/Vevay)
+ # (America/Iqaluit)
+ # (America/Kentucky/Louisville)
+ # (America/Kentucky/Monticello)
+ # (America/Montreal)
+ # (America/Nassau)
+ # (America/New_York)
+ # (America/Nipigon)
+ # (America/Pangnirtung)
+ # (America/Thunder_Bay)
+ # (America/Toronto)
+ EGST 0 D # East Greenland Summer Time
+ # (America/Scoresbysund)
+ EGT -3600 # East Greenland Time (Svalbard & Jan Mayen)
+ # (America/Scoresbysund)
+ # CONFLICT! EST is not unique
+ # Other timezones:
+ # - EST: Eastern Standard Time (Australia)
+ EST -18000 # Eastern Standard Time (America)
+ # (America/Cayman)
+ # (America/Coral_Harbour)
+ # (America/Detroit)
+ # (America/Grand_Turk)
+ # (America/Indiana/Indianapolis)
+ # (America/Indiana/Knox)
+ # (America/Indiana/Marengo)
+ # (America/Indiana/Vevay)
+ # (America/Iqaluit)
+ # (America/Jamaica)
+ # (America/Kentucky/Louisville)
+ # (America/Kentucky/Monticello)
+ # (America/Montreal)
+ # (America/Nassau)
+ # (America/New_York)
+ # (America/Nipigon)
+ # (America/Panama)
+ # (America/Pangnirtung)
+ # (America/Thunder_Bay)
+ # (America/Toronto)
+ FNT -7200 # Fernando de Noronha Time
+ # (America/Noronha)
+ FNST -3600 D # Fernando de Noronha Summer Time (not in zic)
+ # (America/Noronha)
+ GFT -10800 # French Guiana Time
+ # (America/Cayenne)
+ GYT -14400 # Guyana Time
+ # (America/Guyana)
+ MDT -21600 D # Mexico Mountain Daylight Time
+ # Mountain Daylight Time
+ # (America/Boise)
+ # (America/Cambridge_Bay)
+ # (America/Chihuahua)
+ # (America/Denver)
+ # (America/Edmonton)
+ # (America/Inuvik)
+ # (America/Mazatlan)
+ # (America/Yellowknife)
+ MST -25200 # Mexico Mountain Standard Time
+ # Mountain Standard Time
+ # (America/Boise)
+ # (America/Cambridge_Bay)
+ # (America/Chihuahua)
+ # (America/Dawson_Creek)
+ # (America/Denver)
+ # (America/Edmonton)
+ # (America/Hermosillo)
+ # (America/Inuvik)
+ # (America/Mazatlan)
+ # (America/Phoenix)
+ # (America/Yellowknife)
+ NDT -9000 D # Newfoundland Daylight Time
+ # (America/St_Johns)
+ NST -12600 # Newfoundland Standard Time
+ # (America/St_Johns)
+ PET -18000 # Peru Time (not in zic)
+ PDT -25200 D # Pacific Daylight Time
+ # (America/Dawson)
+ # (America/Los_Angeles)
+ # (America/Tijuana)
+ # (America/Vancouver)
+ # (America/Whitehorse)
+ PMDT -7200 D # Pierre & Miquelon Daylight Time
+ # (America/Miquelon)
+ PMST -10800 # Pierre & Miquelon Standard Time
+ # (America/Miquelon)
+ PST -28800 # Pacific Standard Time
+ # (America/Dawson)
+ # (America/Los_Angeles)
+ # (America/Tijuana)
+ # (America/Vancouver)
+ # (America/Whitehorse)
+ # (Pacific/Pitcairn)
+ PYST -10800 D # Paraguay Summer Time
+ # (America/Asuncion)
+ PYT -14400 # Paraguay Time
+ # (America/Asuncion)
+ UYST -7200 D # Uruguay Summer Time (not in zic)
+ UYT -10800 # Uruguay Time (not in zic)
+ VET -14400 # Venezuela Time
+ # (America/Caracas)
+ WGST -7200 D # Western Greenland Summer Time
+ # (America/Godthab)
+ WGT -10800 # West Greenland Time
+ # (America/Godthab)
+
+ #################### ANTARCTICA ####################
+
+ DAVT 25200 # Davis Time (Antarctica)
+ # (Antarctica/Davis)
+ DDUT 36000 # Dumont-d'Urville Time (Antarctica)
+ # (Antarctica/DumontDUrville)
+ # (Antarctica/Palmer)
+ # (America/Santiago)
+ MAWT 21600 # Mawson Time (Antarctica)
+ # (Antarctica/Mawson)
+
+ #################### ASIA ####################
+
+ AFT 16200 # Afghanistan Time
+ # (Asia/Kabul)
+ ALMT 21600 # Alma-Ata Time
+ # (Asia/Almaty)
+ ALMST 25200 D # Alma-Ata Summer Time
+ # (Asia/Almaty)
+ AMST 18000 D # Armenia Summer Time
+ # (Asia/Yerevan)
+ # CONFLICT! AMT is not unique
+ # Other timezones:
+ # - AMT: Amazon Time (America)
+ AMT 14400 # Armenia Time
+ # (Asia/Yerevan)
+ ANAST 46800 D # Anadyr Summer Time
+ # (Asia/Anadyr)
+ ANAT 43200 # Anadyr Time
+ # (Asia/Anadyr)
+ AZST 18000 D # Azerbaijan Summer Time
+ # (Asia/Baku)
+ AZT 14400 # Azerbaijan Time
+ # (Asia/Baku)
+ BDT 21600 # Bangladesh Time
+ # (Asia/Dhaka)
+ BNT 28800 # Brunei Darussalam Time
+ # (Asia/Brunei)
+ BORT 28800 # Borneo Time (Indonesia) (not in zic)
+ BTT 21600 # Bhutan Time
+ # (Asia/Thimphu)
+ CCT 28800 # China Coastal Time (not in zic)
+ GEST 14400 D # Georgia Summer Time (there was a timezone change in 2004)
+ # (Asia/Tbilisi)
+ GET 10800 # Georgia Time (there was a timezone change in 2004)
+ # (Asia/Tbilisi)
+ HKT 28800 # Hong Kong Time (not in zic)
+ ICT 25200 # Indochina Time
+ # (Asia/Bangkok)
+ # (Asia/Phnom_Penh)
+ # (Asia/Saigon)
+ # (Asia/Vientiane)
+ IRKST 32400 D # Irkutsk Summer Time
+ # (Asia/Irkutsk)
+ IRKT 28800 # Irkutsk Time
+ # (Asia/Irkutsk)
+ IRT 12600 # Iran Time (not in zic)
+ # CONFLICT! IST is not unique
+ # Other timezones:
+ # - IST: Irish Summer Time (Europe)
+ # - IST: Indian Standard Time (Asia)
+ IST 7200 # Israel Standard Time (not in zic)
+ JAYT 32400 # Jayapura Time (Indonesia) (not in zic)
+ KDT 36000 D # Korean Daylight Time (not in zic)
+ KGST 21600 D # Kyrgyzstan Summer Time
+ # (Asia/Bishkek)
+ KGT 18000 # Kyrgyzstan Time
+ # (Asia/Bishkek)
+ KRAST 28800 D # Krasnoyarsk Summer Time
+ # (Asia/Krasnoyarsk)
+ KRAT 25200 # Krasnoyarsk Time
+ # (Asia/Krasnoyarsk)
+ KST 32400 # Korean Standard Time
+ # (Asia/Pyongyang)
+ LKT 21600 # Lanka Time
+ # (Asia/Colombo)
+ MAGST 43200 D # Magadan Summer Time
+ # (Asia/Magadan)
+ MAGT 39600 # Magadan Time
+ # (Asia/Magadan)
+ MMT 23400 # Myanmar Time
+ # (Asia/Rangoon)
+ MYT 28800 # Malaysia Time
+ # (Asia/Kuala_Lumpur)
+ # (Asia/Kuching)
+ NOVST 25200 D # Novosibirsk Summer Time
+ # (Asia/Novosibirsk)
+ NOVT 21600 # Novosibirsk Time
+ # (Asia/Novosibirsk)
+ NPT 20700 # Nepal Time
+ # (Asia/Katmandu)
+ OMSST 25200 D # Omsk Summer Time
+ # (Asia/Omsk)
+ OMST 21600 # Omsk Time
+ # (Asia/Omsk)
+ PETST 46800 D # Petropavlovsk-Kamchatski Summer Time
+ # (Asia/Kamchatka)
+ PETT 43200 # Petropavlovsk-Kamchatski Time
+ # (Asia/Kamchatka)
+ PHT 28800 # Phillipine Time (not in zic)
+ PKT 18000 # Pakistan Time (not in zic)
+ TJT 18000 # Tajikistan Time
+ # (Asia/Dushanbe)
+ TMT 18000 # Turkmenistan Time
+ # (Asia/Ashgabat)
+ ULAST 32400 D # Ulan Bator Summer Time
+ # (Asia/Ulaanbaatar)
+ ULAT 28800 # Ulan Bator Time
+ # (Asia/Ulaanbaatar)
+ UZST 21600 D # Uzbekistan Summer Time
+ # (Asia/Samarkand)
+ # (Asia/Tashkent)
+ UZT 18000 # Uzbekistan Time
+ # (Asia/Samarkand)
+ # (Asia/Tashkent)
+ VLAST 39600 D # Vladivostok Summer Time
+ # (Asia/Vladivostok)
+ VLAT 36000 # Vladivostok Time
+ # (Asia/Vladivostok)
+ YAKST 36000 D # Yakutsk Summer Time
+ # (Asia/Yakutsk)
+ YAKT 32400 # Yakutsk Time
+ # (Asia/Yakutsk)
+ YEKST 21600 D # Yekaterinburg Summer Time
+ # (Asia/Yekaterinburg)
+ YEKT 18000 # Yekaterinburg Time
+ # (Asia/Yekaterinburg)
+
+ #################### ATLANTIC ####################
+
+ # CONFLICT! ADT is not unique
+ # Other timezones:
+ # - ADT: Arabic Daylight Time (Asia)
+ ADT -10800 D # Atlantic Daylight Time
+ # (America/Glace_Bay)
+ # (America/Goose_Bay)
+ # (America/Halifax)
+ # (America/Thule)
+ # (Atlantic/Bermuda)
+ # CONFLICT! AST is not unique
+ # Other timezones:
+ # - AST: Arabic Standard Time (Asia)
+ # - AST: Al Manamah Standard Time (Asia) same offset as Arabia Standard Time
+ # - AST/ACT: Acre Standard Time (America) listed as ACT
+ # - AST: Anguilla Standard Time (America) same offset
+ # - AST: Antigua Standard Time (America) same offset
+ # - AST: Antilles Standard Time (America) same offset
+ AST -14400 # Atlantic Standard Time
+ # (America/Anguilla)
+ # (America/Antigua)
+ # (America/Aruba)
+ # (America/Curacao)
+ # (America/Dominica)
+ # (America/Glace_Bay)
+ # (America/Goose_Bay)
+ # (America/Grenada)
+ # (America/Guadeloupe)
+ # (America/Halifax)
+ # (America/Martinique)
+ # (America/Montserrat)
+ # (America/Port_of_Spain)
+ # (America/Puerto_Rico)
+ # (America/Santo_Domingo)
+ # (America/St_Kitts)
+ # (America/St_Lucia)
+ # (America/St_Thomas)
+ # (America/St_Vincent)
+ # (America/Thule)
+ # (America/Tortola)
+ # (Atlantic/Bermuda)
+ AZOST 0 D # Azores Summer Time
+ # (Atlantic/Azores)
+ AZOT -3600 # Azores Time
+ # (Atlantic/Azores)
+ FKST -10800 D # Falkland Islands Summer Time
+ # (Atlantic/Stanley)
+ FKT -14400 # Falkland Islands Time
+ # (Atlantic/Stanley)
+
+ #################### AUSTRALIA ####################
+
+ ACSST 37800 D # Central Australia (not in zic)
+ AESST 39600 D # Australia Eastern Summer Standard Time (not in zic)
+ AEST 36000 # Australia Eastern Standard Time (not in zic)
+ AWSST 32400 D # Australia Western Summer Standard Time (not in zic)
+ AWST 28800 # Australia Western Standard Time (not in zic)
+ CADT 37800 D # Central Australia Daylight-Saving Time (not in zic)
+ CAST 34200 # Central Australia Standard Time (not in zic)
+ LHDT 39600 D # Lord Howe Daylight Time, Australia (not in zic)
+ LHST 37800 # Lord Howe Standard Time (Australia)
+ # (Australia/Lord_Howe)
+ LIGT 36000 # Melbourne, Australia (not in zic)
+ NZT 43200 # New Zealand Time (not in zic)
+ SADT 37800 D # South Australian Daylight-Saving Time (not in zic)
+ SAST 34200 # South Australian Standard Time (not in zic)
+ WADT 28800 D # West Australian Daylight-Saving Time (not in zic)
+ WAST 25200 # West Australian Standard Time (not in zic)
+ WDT 32400 D # West Australian Daylight-Saving Time (not in zic)
+
+ #################### ETC ####################
+
+ GMT 0 # Greenwich Mean Time
+ # (Africa/Abidjan)
+ # (Africa/Bamako)
+ # (Africa/Banjul)
+ # (Africa/Bissau)
+ # (Africa/Conakry)
+ # (Africa/Dakar)
+ # (Africa/Lome)
+ # (Africa/Monrovia)
+ # (Africa/Nouakchott)
+ # (Africa/Ouagadougou)
+ # (Africa/Sao_Tome)
+ # (America/Danmarkshavn)
+ # (Atlantic/Reykjavik)
+ # (Atlantic/St_Helena)
+ # (Etc/GMT)
+ # (Europe/Dublin)
+ # (Europe/London)
+ UCT 0 # Universal Coordinated Time
+ # (Etc/UCT)
+ UT 0 # Universal Time (not in zic)
+ UTC 0 # Coordinated Universal Time
+ Z 0 # Zulu
+ ZULU 0 # Zulu
+
+ #################### EUROPE ####################
+
+ BST 3600 D # British Summer Time
+ # Brazil Standard Time
+ # Bering Summer Time
+ # (Europe/London)
+ BDST 7200 D # British Double Summer Time
+ CEST 7200 D # Central Europe Summer Time
+ # (Africa/Ceuta)
+ # (Europe/Amsterdam)
+ # (Europe/Andorra)
+ # (Europe/Belgrade)
+ # (Europe/Berlin)
+ # (Europe/Brussels)
+ # (Europe/Budapest)
+ # (Europe/Copenhagen)
+ # (Europe/Gibraltar)
+ # (Europe/Luxembourg)
+ # (Europe/Madrid)
+ # (Europe/Malta)
+ # (Europe/Monaco)
+ # (Europe/Oslo)
+ # (Europe/Paris)
+ # (Europe/Prague)
+ # (Europe/Rome)
+ # (Europe/Stockholm)
+ # (Europe/Tirane)
+ # (Europe/Vaduz)
+ # (Europe/Vienna)
+ # (Europe/Warsaw)
+ # (Europe/Zurich)
+ CET 3600 # Central Europe Time
+ # (Africa/Algiers)
+ # (Africa/Ceuta)
+ # (Europe/Amsterdam)
+ # (Europe/Andorra)
+ # (Europe/Belgrade)
+ # (Europe/Berlin)
+ # (Europe/Brussels)
+ # (Europe/Budapest)
+ # (Europe/Copenhagen)
+ # (Europe/Gibraltar)
+ # (Europe/Luxembourg)
+ # (Europe/Madrid)
+ # (Europe/Malta)
+ # (Europe/Monaco)
+ # (Europe/Oslo)
+ # (Europe/Paris)
+ # (Europe/Prague)
+ # (Europe/Rome)
+ # (Europe/Stockholm)
+ # (Europe/Tirane)
+ # (Europe/Vaduz)
+ # (Europe/Vienna)
+ # (Europe/Warsaw)
+ # (Europe/Zurich)
+ CETDST 7200 D # Central Europe Summer Time
+ # (Africa/Ceuta)
+ # (Europe/Amsterdam)
+ # (Europe/Andorra)
+ # (Europe/Belgrade)
+ # (Europe/Berlin)
+ # (Europe/Brussels)
+ # (Europe/Budapest)
+ # (Europe/Copenhagen)
+ # (Europe/Gibraltar)
+ # (Europe/Luxembourg)
+ # (Europe/Madrid)
+ # (Europe/Malta)
+ # (Europe/Monaco)
+ # (Europe/Oslo)
+ # (Europe/Paris)
+ # (Europe/Prague)
+ # (Europe/Rome)
+ # (Europe/Stockholm)
+ # (Europe/Tirane)
+ # (Europe/Vaduz)
+ # (Europe/Vienna)
+ # (Europe/Warsaw)
+ # (Europe/Zurich)
+ EEST 10800 D # East-Egypt Summertime
+ # Eastern Europe Summer Time
+ # (Africa/Cairo)
+ # (Asia/Amman)
+ # (Asia/Beirut)
+ # (Asia/Damascus)
+ # (Asia/Gaza)
+ # (Asia/Nicosia)
+ # (Europe/Athens)
+ # (Europe/Bucharest)
+ # (Europe/Chisinau)
+ # (Europe/Helsinki)
+ # (Europe/Istanbul)
+ # (Europe/Kaliningrad)
+ # (Europe/Kiev)
+ # (Europe/Minsk)
+ # (Europe/Riga)
+ # (Europe/Simferopol)
+ # (Europe/Sofia)
+ # (Europe/Tallinn)
+ # (Europe/Uzhgorod)
+ # (Europe/Vilnius)
+ # (Europe/Zaporozhye)
+ EET 7200 # East-Egypt Time
+ # Eastern Europe Time
+ # (Africa/Cairo)
+ # (Africa/Tripoli)
+ # (Asia/Amman)
+ # (Asia/Beirut)
+ # (Asia/Damascus)
+ # (Asia/Gaza)
+ # (Asia/Nicosia)
+ # (Europe/Athens)
+ # (Europe/Bucharest)
+ # (Europe/Chisinau)
+ # (Europe/Helsinki)
+ # (Europe/Istanbul)
+ # (Europe/Kaliningrad)
+ # (Europe/Kiev)
+ # (Europe/Minsk)
+ # (Europe/Riga)
+ # (Europe/Simferopol)
+ # (Europe/Sofia)
+ # (Europe/Tallinn)
+ # (Europe/Uzhgorod)
+ # (Europe/Vilnius)
+ # (Europe/Zaporozhye)
+ EETDST 10800 D # East-Egypt Summertime
+ # Eastern Europe Summer Time
+ # (Africa/Cairo)
+ # (Asia/Amman)
+ # (Asia/Beirut)
+ # (Asia/Damascus)
+ # (Asia/Gaza)
+ # (Asia/Nicosia)
+ # (Europe/Athens)
+ # (Europe/Bucharest)
+ # (Europe/Chisinau)
+ # (Europe/Helsinki)
+ # (Europe/Istanbul)
+ # (Europe/Kaliningrad)
+ # (Europe/Kiev)
+ # (Europe/Minsk)
+ # (Europe/Riga)
+ # (Europe/Simferopol)
+ # (Europe/Sofia)
+ # (Europe/Tallinn)
+ # (Europe/Uzhgorod)
+ # (Europe/Vilnius)
+ # (Europe/Zaporozhye)
+ MEST 7200 D # Middle Europe Summer Time (not in zic)
+ MET 3600 # Middle Europe Time (not in zic)
+ METDST 7200 D # Middle Europe Summer Time (not in zic)
+ MEZ 3600 # Mitteleuropaeische Zeit (German) (not in zic)
+ MSD 14400 D # Moscow Daylight Time
+ # (Europe/Moscow)
+ MSK 10800 # Moscow Time
+ # (Europe/Moscow)
+ WET 0 # Western Europe Time
+ # (Africa/Casablanca)
+ # (Africa/El_Aaiun)
+ # (Atlantic/Canary)
+ # (Atlantic/Faeroe)
+ # (Atlantic/Madeira)
+ # (Europe/Lisbon)
+ WETDST 3600 D # Western Europe Summer Time
+ # (Atlantic/Canary)
+ # (Atlantic/Faeroe)
+ # (Atlantic/Madeira)
+ # (Europe/Lisbon)
+
+ #################### INDIAN ####################
+
+ CXT 25200 # Christmas Island Time (Indian Ocean)
+ # (Indian/Christmas)
+ IOT 21600 # British Indian Ocean Territory (Chagos) (there was a timezone change recently in 1996)
+ # (Indian/Chagos)
+ MUT 14400 # Mauritius Island Time
+ # (Indian/Mauritius)
+ MVT 18000 # Maldives Island Time
+ # (Indian/Maldives)
+ RET 14400 # Reunion Time
+ # (Indian/Reunion)
+ SCT 14400 # Seychelles Time
+ # (Indian/Mahe)
+ TFT 18000 # Kerguelen Time
+ # (Indian/Kerguelen)
+
+ #################### PACIFIC ####################
+
+ CHADT 49500 D # Chatham Daylight Time (New Zealand)
+ # (Pacific/Chatham)
+ CHAST 45900 # Chatham Standard Time (New Zealand)
+ # (Pacific/Chatham)
+ CKT 43200 # Cook Islands Time (not in zic)
+ EASST -18000 D # Easter Island Summer Time (Chile)
+ # (Pacific/Easter)
+ EAST -21600 # Easter Island Time (Chile)
+ # (Pacific/Easter)
+ FJST -46800 D # Fiji Summer Time (not in zic)
+ FJT -43200 # Fiji Time (not in zic)
+ GALT -21600 # Galapagos Time
+ # (Pacific/Galapagos)
+ GAMT -32400 # Gambier Time
+ # (Pacific/Gambier)
+ GILT 43200 # Gilbert Islands Time
+ # (Pacific/Tarawa)
+ HST -36000 # Hawaiian Standard Time
+ # (Pacific/Honolulu)
+ # (Pacific/Johnston)
+ KOST 39600 # Kosrae Time
+ # (Pacific/Kosrae)
+ LINT 50400 # Line Islands Time (Kiribati)
+ # (Pacific/Kiritimati)
+ MART -34200 # Marquesas Time
+ # (Pacific/Marquesas)
+ MHT 43200 # Kwajalein Time
+ # (Pacific/Kwajalein)
+ # (Pacific/Majuro)
+ MPT 36000 # North Mariana Islands Time (not in zic)
+ # CONFLICT! NFT is not unique
+ # Other timezones:
+ # - NFT: Norfolk Time (Pacific)
+ NFT -12600 # Newfoundland Time (not in zic)
+ NUT -39600 # Niue Time
+ # (Pacific/Niue)
+ NZDT 46800 D # New Zealand Daylight Time
+ # (Antarctica/McMurdo)
+ # (Pacific/Auckland)
+ NZST 43200 # New Zealand Standard Time
+ # (Antarctica/McMurdo)
+ # (Pacific/Auckland)
+ PGT 36000 # Papua New Guinea Time
+ # (Pacific/Port_Moresby)
+ PHOT 46800 # Phoenix Islands Time (Kiribati)
+ # (Pacific/Enderbury)
+ PONT 39600 # Ponape Time (Micronesia)
+ # (Pacific/Ponape)
+ PWT 32400 # Palau Time
+ # (Pacific/Palau)
+ TAHT -36000 # Tahiti Time (zic says "TAHT", other sources "THAT")
+ # (Pacific/Tahiti)
+ TKT -36000 # Tokelau Time
+ # (Pacific/Fakaofo)
+ TOT 46800 # Tonga Time (not in zic)
+ TRUT 36000 # Truk Time (zic says "TRUT", other souces say "TRUK")
+ # (Pacific/Truk)
+ TVT 43200 # Tuvalu Time
+ # (Pacific/Funafuti)
+ VUT 39600 # Vanuata Time (not in zic)
+ WAKT 43200 # Wake Time
+ # (Pacific/Wake)
+ WFT 43200 # Wallis and Futuna Time
+ # (Pacific/Wallis)
+ YAPT 36000 # Yap Time (Micronesia) (not in zic)
+
diff -cNr cvs/pgsql/src/timezone/tznames/sets/India cvs.build/pgsql/src/timezone/tznames/sets/India
*** cvs/pgsql/src/timezone/tznames/sets/India 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/sets/India 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,14 ----
+ # Time zone configuration file for set "India"
+
+ # In order to use this file, you need to set
+ #
+ # timezone_abbreviations = 'India'
+ #
+ # in your postgresql.conf configuration file.
+
+
+ # include the default set
+ @INCLUDE Default
+
+ IST 19800 # Indian Standard Time
+ # (Asia/Calcutta)
diff -cNr cvs/pgsql/src/timezone/tznames/sets/README cvs.build/pgsql/src/timezone/tznames/sets/README
*** cvs/pgsql/src/timezone/tznames/sets/README 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/sets/README 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,22 ----
+ This directory contains files with timezone sets for PostgreSQL. The problem
+ is that time zone abbreviations are not unique throughout the world and you
+ might find out that a time zone abbreviation in the `Default' set collides
+ with the one you intended to use. All other files except for `Default' are
+ intended to override values from the `Default' set. So you might already have a
+ file here that serves your needs. If not, you can create your own.
+
+ In order to use those files, you need to set
+
+ timezone_abbreviations = 'xyz'
+
+ in your postgresql.conf configuration file, where xyz is the filename that
+ contains the desired time zone names.
+
+
+ If you think that a set of time zone names for your geographic location is
+ missing here and you find that you have to change more than just the
+ `timezone_abbreviations' parameter in postgresql.conf, please report this to
+ <pgsql-hackers@postgresql.org>. Your set of time zone names can then be
+ included in future releases. For the time being you can always add your own
+ set.
+
diff -cNr cvs/pgsql/src/timezone/tznames/templates/Africa.txt cvs.build/pgsql/src/timezone/tznames/templates/Africa.txt
*** cvs/pgsql/src/timezone/tznames/templates/Africa.txt 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/templates/Africa.txt 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,176 ----
+ #
+ # NOTE:
+ # This file is NOT loaded by the PostgreSQL database. It just serves as a
+ # template for timezones you could need.
+ #
+ # To add a timezone abbreviation, copy the definition from here to
+ # ../sets/<YourSetName> and specify
+ #
+ # timezone_abbreviations = '<YourSetName>'
+ #
+ # in postgresql.conf. See the existing files in ../sets for information on
+ # how to include other files and how to override timezone abbreviations from
+ # the default set.
+ #
+
+ CAT 7200 # Central Africa Time
+ # (Africa/Blantyre)
+ # (Africa/Bujumbura)
+ # (Africa/Gaborone)
+ # (Africa/Harare)
+ # (Africa/Kigali)
+ # (Africa/Lubumbashi)
+ # (Africa/Lusaka)
+ # (Africa/Maputo)
+ CEST 7200 D # Central Europe Summer Time
+ # (Africa/Ceuta)
+ # (Europe/Amsterdam)
+ # (Europe/Andorra)
+ # (Europe/Belgrade)
+ # (Europe/Berlin)
+ # (Europe/Brussels)
+ # (Europe/Budapest)
+ # (Europe/Copenhagen)
+ # (Europe/Gibraltar)
+ # (Europe/Luxembourg)
+ # (Europe/Madrid)
+ # (Europe/Malta)
+ # (Europe/Monaco)
+ # (Europe/Oslo)
+ # (Europe/Paris)
+ # (Europe/Prague)
+ # (Europe/Rome)
+ # (Europe/Stockholm)
+ # (Europe/Tirane)
+ # (Europe/Vaduz)
+ # (Europe/Vienna)
+ # (Europe/Warsaw)
+ # (Europe/Zurich)
+ CET 3600 # Central Europe Time
+ # (Africa/Algiers)
+ # (Africa/Ceuta)
+ # (Europe/Amsterdam)
+ # (Europe/Andorra)
+ # (Europe/Belgrade)
+ # (Europe/Berlin)
+ # (Europe/Brussels)
+ # (Europe/Budapest)
+ # (Europe/Copenhagen)
+ # (Europe/Gibraltar)
+ # (Europe/Luxembourg)
+ # (Europe/Madrid)
+ # (Europe/Malta)
+ # (Europe/Monaco)
+ # (Europe/Oslo)
+ # (Europe/Paris)
+ # (Europe/Prague)
+ # (Europe/Rome)
+ # (Europe/Stockholm)
+ # (Europe/Tirane)
+ # (Europe/Vaduz)
+ # (Europe/Vienna)
+ # (Europe/Warsaw)
+ # (Europe/Zurich)
+ EAT 10800 # East Africa Time
+ # (Africa/Addis_Ababa)
+ # (Africa/Asmera)
+ # (Africa/Dar_es_Salaam)
+ # (Africa/Djibouti)
+ # (Africa/Kampala)
+ # (Africa/Khartoum)
+ # (Africa/Mogadishu)
+ # (Africa/Nairobi)
+ # (Indian/Antananarivo)
+ # (Indian/Comoro)
+ # (Indian/Mayotte)
+ EEST 10800 D # East-Egypt Summer Time
+ # Eastern Europe Summer Time
+ # (Africa/Cairo)
+ # (Asia/Amman)
+ # (Asia/Beirut)
+ # (Asia/Damascus)
+ # (Asia/Gaza)
+ # (Asia/Nicosia)
+ # (Europe/Athens)
+ # (Europe/Bucharest)
+ # (Europe/Chisinau)
+ # (Europe/Helsinki)
+ # (Europe/Istanbul)
+ # (Europe/Kaliningrad)
+ # (Europe/Kiev)
+ # (Europe/Minsk)
+ # (Europe/Riga)
+ # (Europe/Simferopol)
+ # (Europe/Sofia)
+ # (Europe/Tallinn)
+ # (Europe/Uzhgorod)
+ # (Europe/Vilnius)
+ # (Europe/Zaporozhye)
+ EET 7200 # East-Egypt Time
+ # Eastern Europe Time
+ # (Africa/Cairo)
+ # (Africa/Tripoli)
+ # (Asia/Amman)
+ # (Asia/Beirut)
+ # (Asia/Damascus)
+ # (Asia/Gaza)
+ # (Asia/Nicosia)
+ # (Europe/Athens)
+ # (Europe/Bucharest)
+ # (Europe/Chisinau)
+ # (Europe/Helsinki)
+ # (Europe/Istanbul)
+ # (Europe/Kaliningrad)
+ # (Europe/Kiev)
+ # (Europe/Minsk)
+ # (Europe/Riga)
+ # (Europe/Simferopol)
+ # (Europe/Sofia)
+ # (Europe/Tallinn)
+ # (Europe/Uzhgorod)
+ # (Europe/Vilnius)
+ # (Europe/Zaporozhye)
+ GMT 0 # Greenwich Mean Time
+ # (Africa/Abidjan)
+ # (Africa/Bamako)
+ # (Africa/Banjul)
+ # (Africa/Bissau)
+ # (Africa/Conakry)
+ # (Africa/Dakar)
+ # (Africa/Lome)
+ # (Africa/Monrovia)
+ # (Africa/Nouakchott)
+ # (Africa/Ouagadougou)
+ # (Africa/Sao_Tome)
+ # (America/Danmarkshavn)
+ # (Atlantic/Reykjavik)
+ # (Atlantic/St_Helena)
+ # (Etc/GMT)
+ # (Europe/Dublin)
+ # (Europe/London)
+ SAST 7200 # South Africa Standard Time
+ # Australian South Standard Time
+ # (Africa/Maseru)
+ # (Africa/Mbabane)
+ WAST 7200 D # West Africa Summer Time
+ # (Africa/Windhoek)
+ WAT 3600 # West Africa Time
+ # (Africa/Bangui)
+ # (Africa/Brazzaville)
+ # (Africa/Douala)
+ # (Africa/Kinshasa)
+ # (Africa/Lagos)
+ # (Africa/Libreville)
+ # (Africa/Luanda)
+ # (Africa/Malabo)
+ # (Africa/Ndjamena)
+ # (Africa/Niamey)
+ # (Africa/Porto-Novo)
+ # (Africa/Windhoek)
+ WET 0 # Western Europe Time
+ # (Africa/Casablanca)
+ # (Africa/El_Aaiun)
+ # (Atlantic/Canary)
+ # (Atlantic/Faeroe)
+ # (Atlantic/Madeira)
+ # (Europe/Lisbon)
diff -cNr cvs/pgsql/src/timezone/tznames/templates/America.txt cvs.build/pgsql/src/timezone/tznames/templates/America.txt
*** cvs/pgsql/src/timezone/tznames/templates/America.txt 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/templates/America.txt 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,299 ----
+ #
+ # NOTE:
+ # This file is NOT loaded by the PostgreSQL database. It just serves as a
+ # template for timezones you could need.
+ #
+ # To add a timezone abbreviation, copy the definition from here to
+ # ../sets/<YourSetName> and specify
+ #
+ # timezone_abbreviations = '<YourSetName>'
+ #
+ # in postgresql.conf. See the existing files in ../sets for information on
+ # how to include other files and how to override timezone abbreviations from
+ # the default set.
+ #
+
+ # Acre time is sometimes called Acre Standard Time (AST) which leads to a
+ # conflict with AST (see below at AST)
+ ACT -18000 # Acre Time
+ # (America/Eirunepe)
+ # (America/Rio_Branco)
+ # CONFLICT! ACST is not unique
+ # Other timezones:
+ # - ACST: Central Australia Standard Time (Australia)
+ ACST -14400 D # Acre Summer Time (not in zic)
+ # (America/Eirunepe)
+ # (America/Rio_Branco)
+ # CONFLICT! ADT is not unique
+ # Other timezones:
+ # - ADT: Arabic Daylight Time (Asia)
+ ADT -10800 D # Atlantic Daylight Time
+ # (America/Glace_Bay)
+ # (America/Goose_Bay)
+ # (America/Halifax)
+ # (America/Thule)
+ # (Atlantic/Bermuda)
+ AKDT -28800 D # Alaska Daylight Time
+ # (America/Anchorage)
+ # (America/Juneau)
+ # (America/Nome)
+ # (America/Yakutat)
+ AKST -32400 # Alaska Standard Time
+ # (America/Anchorage)
+ # (America/Juneau)
+ # (America/Nome)
+ # (America/Yakutat)
+ # CONFLICT! AMST is not unique
+ # Other timezones:
+ # - AMST: Armenia Summer Time (Asia)
+ AMST -10800 D # Amazon Summer Time
+ # (America/Campo_Grande)
+ # (America/Cuiaba)
+ # CONFLICT! AMT is not unique
+ # Other timezones:
+ # - AMT: Armenia Time (Asia)
+ AMT -14400 # Amazon Time
+ # (America/Boa_Vista)
+ # (America/Campo_Grande)
+ # (America/Cuiaba)
+ # (America/Manaus)
+ # (America/Porto_Velho)
+ ART -10800 # Argentina Time (not in zic)
+ # CONFLICT! AST is not unique
+ # Other timezones:
+ # - AST: Arabic Standard Time (Asia)
+ # - AST: Al Manamah Standard Time (Asia) same offset as Arabia Standard Time
+ # - AST/ACT: Acre Standard Time (America) listed as ACT
+ # - AST: Anguilla Standard Time (America) same offset
+ # - AST: Antigua Standard Time (America) same offset
+ # - AST: Antilles Standard Time (America) same offset
+ AST -14400 # Atlantic Standard Time
+ # (America/Anguilla)
+ # (America/Antigua)
+ # (America/Aruba)
+ # (America/Curacao)
+ # (America/Dominica)
+ # (America/Glace_Bay)
+ # (America/Goose_Bay)
+ # (America/Grenada)
+ # (America/Guadeloupe)
+ # (America/Halifax)
+ # (America/Martinique)
+ # (America/Montserrat)
+ # (America/Port_of_Spain)
+ # (America/Puerto_Rico)
+ # (America/Santo_Domingo)
+ # (America/St_Kitts)
+ # (America/St_Lucia)
+ # (America/St_Thomas)
+ # (America/St_Vincent)
+ # (America/Thule)
+ # (America/Tortola)
+ # (Atlantic/Bermuda)
+ BOT -14400 # Bolivia Time
+ # (America/La_Paz)
+ BRA -10800 # Brazil Time (not in zic)
+ BRST -7200 D # Brasil Summer Time
+ # (America/Sao_Paulo)
+ BRT -10800 # Brasil Time
+ # (America/Araguaina)
+ # (America/Bahia)
+ # (America/Belem)
+ # (America/Fortaleza)
+ # (America/Maceio)
+ # (America/Recife)
+ # (America/Sao_Paulo)
+ # CONFLICT! CDT is not unique
+ # Other timezones:
+ # - CDT: Central Daylight Time (America)
+ # - CDT: Mexico Central Daylight Time (America)
+ # - CDT: Canada Central Daylight Time (America)
+ CDT -14400 D # Cuba Central Daylight Time
+ # (America/Havana)
+ # CONFLICT! CDT is not unique
+ # Other timezones:
+ # - CDT: Mexico Central Daylight Time (America)
+ # - CDT: Cuba Central Daylight Time (America)
+ # - CDT: Canada Central Daylight Time (America)
+ CDT -18000 D # Central Daylight Time
+ # (America/Cancun)
+ # (America/Chicago)
+ # (America/Menominee)
+ # (America/Merida)
+ # (America/Mexico_City)
+ # (America/Monterrey)
+ # (America/North_Dakota/Center)
+ # (America/Rainy_River)
+ # (America/Rankin_Inlet)
+ # (America/Winnipeg)
+ CLST -10800 D # Chile Summer Time
+ # (America/Santiago)
+ # (Antarctica/Palmer)
+ CLT -14400 # Chile Time
+ # (America/Santiago)
+ # (Antarctica/Palmer)
+ COT -18000 # Columbia Time (not in zic)
+ # CONFLICT! CST is not unique
+ # Other timezones:
+ # - CST: Central Standard Time (Australia)
+ # - CST: Central Standard Time (America)
+ CST -18000 # Cuba Central Standard Time (America)
+ # (America/Havana)
+ # CONFLICT! CST is not unique
+ # Other timezones:
+ # - CST: Central Standard Time (Australia)
+ # - CST: Cuba Central Standard Time (America)
+ CST -21600 # Central Standard Time (America)
+ # (America/Cancun)
+ # (America/Chicago)
+ # (America/Menominee)
+ # (America/Merida)
+ # (America/Mexico_City)
+ # (America/Monterrey)
+ # (America/North_Dakota/Center)
+ # (America/Rainy_River)
+ # (America/Rankin_Inlet)
+ # (America/Regina)
+ # (America/Swift_Current)
+ # (America/Winnipeg)
+ ECT -18000 # Ecuador Time
+ # Eastern Caribbean Time
+ # (America/Guayaquil)
+ EDT -14400 D # Eastern Daylight Saving Time
+ # (America/Detroit)
+ # (America/Grand_Turk)
+ # (America/Indiana/Indianapolis)
+ # (America/Indiana/Knox)
+ # (America/Indiana/Marengo)
+ # (America/Indiana/Vevay)
+ # (America/Iqaluit)
+ # (America/Kentucky/Louisville)
+ # (America/Kentucky/Monticello)
+ # (America/Montreal)
+ # (America/Nassau)
+ # (America/New_York)
+ # (America/Nipigon)
+ # (America/Pangnirtung)
+ # (America/Thunder_Bay)
+ # (America/Toronto)
+ EGST 0 D # East Greenland Summer Time
+ # (America/Scoresbysund)
+ EGT -3600 # East Greenland Time (Svalbard & Jan Mayen)
+ # (America/Scoresbysund)
+ # CONFLICT! EST is not unique
+ # Other timezones:
+ # - EST: Eastern Standard Time (Australia)
+ EST -18000 # Eastern Standard Time (America)
+ # (America/Cayman)
+ # (America/Coral_Harbour)
+ # (America/Detroit)
+ # (America/Grand_Turk)
+ # (America/Indiana/Indianapolis)
+ # (America/Indiana/Knox)
+ # (America/Indiana/Marengo)
+ # (America/Indiana/Vevay)
+ # (America/Iqaluit)
+ # (America/Jamaica)
+ # (America/Kentucky/Louisville)
+ # (America/Kentucky/Monticello)
+ # (America/Montreal)
+ # (America/Nassau)
+ # (America/New_York)
+ # (America/Nipigon)
+ # (America/Panama)
+ # (America/Pangnirtung)
+ # (America/Thunder_Bay)
+ # (America/Toronto)
+ FNT -7200 # Fernando de Noronha Time
+ # (America/Noronha)
+ FNST -3600 D # Fernando de Noronha Summer Time (not in zic)
+ # (America/Noronha)
+ GFT -10800 # French Guiana Time
+ # (America/Cayenne)
+ GMT 0 # Greenwich Mean Time
+ # (Africa/Abidjan)
+ # (Africa/Bamako)
+ # (Africa/Banjul)
+ # (Africa/Bissau)
+ # (Africa/Conakry)
+ # (Africa/Dakar)
+ # (Africa/Lome)
+ # (Africa/Monrovia)
+ # (Africa/Nouakchott)
+ # (Africa/Ouagadougou)
+ # (Africa/Sao_Tome)
+ # (America/Danmarkshavn)
+ # (Atlantic/Reykjavik)
+ # (Atlantic/St_Helena)
+ # (Etc/GMT)
+ # (Europe/Dublin)
+ # (Europe/London)
+ GYT -14400 # Guyana Time
+ # (America/Guyana)
+ HADT -32400 D # Hawaii-Aleutain Daylight Time
+ # (America/Adak)
+ HAST -36000 # Hawaii-Aleutain Standard Time
+ # (America/Adak)
+ MDT -21600 D # Mexico Mountain Daylight Time
+ # Mountain Daylight Time
+ # (America/Boise)
+ # (America/Cambridge_Bay)
+ # (America/Chihuahua)
+ # (America/Denver)
+ # (America/Edmonton)
+ # (America/Inuvik)
+ # (America/Mazatlan)
+ # (America/Yellowknife)
+ MST -25200 # Mexico Mountain Standard Time
+ # Mountain Standard Time
+ # (America/Boise)
+ # (America/Cambridge_Bay)
+ # (America/Chihuahua)
+ # (America/Dawson_Creek)
+ # (America/Denver)
+ # (America/Edmonton)
+ # (America/Hermosillo)
+ # (America/Inuvik)
+ # (America/Mazatlan)
+ # (America/Phoenix)
+ # (America/Yellowknife)
+ NDT -9000 D # Newfoundland Daylight Time
+ # (America/St_Johns)
+ # CONFLICT! NFT is not unique
+ # Other timezones:
+ # - NFT: Norfolk Time (Pacific)
+ NFT -12600 # Newfoundland Time (not in zic)
+ NST -12600 # Newfoundland Standard Time
+ # (America/St_Johns)
+ PDT -25200 D # Pacific Daylight Time
+ # (America/Dawson)
+ # (America/Los_Angeles)
+ # (America/Tijuana)
+ # (America/Vancouver)
+ # (America/Whitehorse)
+ PET -18000 # Peru Time (not in zic)
+ PMDT -7200 D # Pierre & Miquelon Daylight Time
+ # (America/Miquelon)
+ PMST -10800 # Pierre & Miquelon Standard Time
+ # (America/Miquelon)
+ PST -28800 # Pacific Standard Time
+ # (America/Dawson)
+ # (America/Los_Angeles)
+ # (America/Tijuana)
+ # (America/Vancouver)
+ # (America/Whitehorse)
+ # (Pacific/Pitcairn)
+ PYST -10800 D # Paraguay Summer Time
+ # (America/Asuncion)
+ PYT -14400 # Paraguay Time
+ # (America/Asuncion)
+ SRT -10800 # Suriname Time
+ # (America/Paramaribo)
+ UYST -7200 D # Uruguay Summer Time (not in zic)
+ UYT -10800 # Uruguay Time (not in zic)
+ VET -14400 # Venezuela Time
+ # (America/Caracas)
+ WGST -7200 D # Western Greenland Summer Time
+ # (America/Godthab)
+ WGT -10800 # West Greenland Time
+ # (America/Godthab)
diff -cNr cvs/pgsql/src/timezone/tznames/templates/Antarctica.txt cvs.build/pgsql/src/timezone/tznames/templates/Antarctica.txt
*** cvs/pgsql/src/timezone/tznames/templates/Antarctica.txt 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/templates/Antarctica.txt 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,45 ----
+ #
+ # NOTE:
+ # This file is NOT loaded by the PostgreSQL database. It just serves as a
+ # template for timezones you could need.
+ #
+ # To add a timezone abbreviation, copy the definition from here to
+ # ../sets/<YourSetName> and specify
+ #
+ # timezone_abbreviations = '<YourSetName>'
+ #
+ # in postgresql.conf. See the existing files in ../sets for information on
+ # how to include other files and how to override timezone abbreviations from
+ # the default set.
+ #
+
+ CLST -10800 D # Chile Summer Time
+ # (America/Santiago)
+ # (Antarctica/Palmer)
+ CLT -14400 # Chile Time
+ # (America/Santiago)
+ # (Antarctica/Palmer)
+ DAVT 25200 # Davis Time (Antarctica)
+ # (Antarctica/Davis)
+ DDUT 36000 # Dumont-d`Urville Time (Antarctica)
+ # (Antarctica/DumontDUrville)
+ MAWT 21600 # Mawson Time (Antarctica)
+ # (Antarctica/Mawson)
+ NZDT 46800 D # New Zealand Daylight Time
+ # (Antarctica/McMurdo)
+ # (Pacific/Auckland)
+ NZST 43200 # New Zealand Standard Time
+ # (Antarctica/McMurdo)
+ # (Pacific/Auckland)
+ ROTT -10800 # Rothera Time
+ # (Antarctica/Rothera)
+ SYOT 10800 # Syowa Time
+ # (Antarctica/Syowa)
+ VOST 21600 # Vostok time
+ # (Antarctica/Vostok)
+ # CONFLICT! WST is not unique
+ # Other timezones:
+ # - WST: West Samoa Time
+ WST 28800 # Western Standard Time (Australia)
+ # (Antarctica/Casey)
+ # (Australia/Perth)
diff -cNr cvs/pgsql/src/timezone/tznames/templates/Asia.txt cvs.build/pgsql/src/timezone/tznames/templates/Asia.txt
*** cvs/pgsql/src/timezone/tznames/templates/Asia.txt 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/templates/Asia.txt 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,244 ----
+ #
+ # NOTE:
+ # This file is NOT loaded by the PostgreSQL database. It just serves as a
+ # template for timezones you could need.
+ #
+ # To add a timezone abbreviation, copy the definition from here to
+ # ../sets/<YourSetName> and specify
+ #
+ # timezone_abbreviations = '<YourSetName>'
+ #
+ # in postgresql.conf. See the existing files in ../sets for information on
+ # how to include other files and how to override timezone abbreviations from
+ # the default set.
+ #
+
+ # CONFLICT! ADT is not unique
+ # Other timezones:
+ # - ADT: Atlantic Daylight Time (America)
+ ADT 14400 D # Arabia Daylight Time
+ # (Asia/Baghdad)
+ AFT 16200 # Afghanistan Time
+ # (Asia/Kabul)
+ ALMST 25200 D # Alma-Ata Summer Time
+ # (Asia/Almaty)
+ ALMT 21600 # Alma-Ata Time
+ # (Asia/Almaty)
+ # CONFLICT! AMST is not unique
+ # Other timezones:
+ # - AMST: Amazon Summer Time (America)
+ AMST 18000 D # Armenia Summer Time
+ # (Asia/Yerevan)
+ # CONFLICT! AMT is not unique
+ # Other timezones:
+ # - AMT: Amazon Time (America)
+ AMT 14400 # Armenia Time
+ # (Asia/Yerevan)
+ ANAST 46800 D # Anadyr Summer Time
+ # (Asia/Anadyr)
+ ANAT 43200 # Anadyr Time
+ # (Asia/Anadyr)
+ AQTT 18000 # Aqtau Time
+ # Aqtobe Time
+ # (Asia/Aqtau)
+ # (Asia/Aqtobe)
+ # CONFLICT! AST is not unique
+ # Other timezones:
+ # - AST: Atlantic Standard Time (America)
+ # - AST/ACT: Acre Standard Time (America) listed as ACT
+ # - AST: Anguilla Standard Time (America) same offset as Atlantic Standard Time
+ # - AST: Antigua Standard Time (America) same offset as Atlantic Standard Time
+ # - AST: Antilles Standard Time (America) same offset as Atlantic Standard Time
+ # - AST: Al Manamah Standard Time (Asia) same offset as Arabia Standard Time
+ AST 10800 # Arabia Standard Time
+ # (Asia/Aden)
+ # (Asia/Baghdad)
+ # (Asia/Bahrain)
+ # (Asia/Kuwait)
+ # (Asia/Qatar)
+ # (Asia/Riyadh)
+ AZST 18000 D # Azerbaijan Summer Time
+ # (Asia/Baku)
+ AZT 14400 # Azerbaijan Time
+ # (Asia/Baku)
+ BDT 21600 # Bangladesh Time
+ # (Asia/Dhaka)
+ BNT 28800 # Brunei Darussalam Time
+ # (Asia/Brunei)
+ BORT 28800 # Borneo Time (Indonesia) (not in zic)
+ BTT 21600 # Bhutan Time
+ # (Asia/Thimphu)
+ CCT 28800 # China Coastal Time (not in zic)
+ CHOST 36000 D # Choibalsan Summer Time
+ # (Asia/Choibalsan)
+ CHOT 32400 # Choibalsan Time
+ # (Asia/Choibalsan)
+ CIT 28800 # Central Indonesia Time
+ # (Asia/Makassar)
+ EEST 10800 D # East-Egypt Summer Time
+ # Eastern Europe Summer Time
+ # (Africa/Cairo)
+ # (Asia/Amman)
+ # (Asia/Beirut)
+ # (Asia/Damascus)
+ # (Asia/Gaza)
+ # (Asia/Nicosia)
+ # (Europe/Athens)
+ # (Europe/Bucharest)
+ # (Europe/Chisinau)
+ # (Europe/Helsinki)
+ # (Europe/Istanbul)
+ # (Europe/Kaliningrad)
+ # (Europe/Kiev)
+ # (Europe/Minsk)
+ # (Europe/Riga)
+ # (Europe/Simferopol)
+ # (Europe/Sofia)
+ # (Europe/Tallinn)
+ # (Europe/Uzhgorod)
+ # (Europe/Vilnius)
+ # (Europe/Zaporozhye)
+ EET 7200 # East-Egypt Time
+ # Eastern Europe Time
+ # (Africa/Cairo)
+ # (Africa/Tripoli)
+ # (Asia/Amman)
+ # (Asia/Beirut)
+ # (Asia/Damascus)
+ # (Asia/Gaza)
+ # (Asia/Nicosia)
+ # (Europe/Athens)
+ # (Europe/Bucharest)
+ # (Europe/Chisinau)
+ # (Europe/Helsinki)
+ # (Europe/Istanbul)
+ # (Europe/Kaliningrad)
+ # (Europe/Kiev)
+ # (Europe/Minsk)
+ # (Europe/Riga)
+ # (Europe/Simferopol)
+ # (Europe/Sofia)
+ # (Europe/Tallinn)
+ # (Europe/Uzhgorod)
+ # (Europe/Vilnius)
+ # (Europe/Zaporozhye)
+ EIT 32400 # East Indonesia Time
+ # (Asia/Jayapura)
+ GEST 14400 D # Georgia Summer Time (there was a timezone change in 2004)
+ # (Asia/Tbilisi)
+ GET 10800 # Georgia Time (there was a timezone change in 2004)
+ # (Asia/Tbilisi)
+ # CONFLICT! GST is not unique
+ # Other timezones:
+ # - GST: South Georgia Time (Atlantic)
+ GST 14400 # Gulf Standard Time
+ # (Asia/Dubai)
+ # (Asia/Muscat)
+ HKT 28800 # Hong Kong Time (not in zic)
+ HOVST 28800 D # Hovd Summer Time
+ # (Asia/Hovd)
+ HOVT 25200 # Hovd Time
+ # (Asia/Hovd)
+ ICT 25200 # Indochina Time
+ # (Asia/Bangkok)
+ # (Asia/Phnom_Penh)
+ # (Asia/Saigon)
+ # (Asia/Vientiane)
+ IRKST 32400 D # Irkutsk Summer Time
+ # (Asia/Irkutsk)
+ IRKT 28800 # Irkutsk Time
+ # (Asia/Irkutsk)
+ IRT 12600 # Iran Time (not in zic)
+ # CONFLICT! IST is not unique
+ # Other timezones:
+ # - IST: Irish Summer Time (Europe)
+ # - IST: Israel Standard Time (Asia)
+ IST 19800 # Indian Standard Time
+ # (Asia/Calcutta)
+ # CONFLICT! IST is not unique
+ # Other timezones:
+ # - IST: Irish Summer Time (Europe)
+ # - IST: Indian Standard Time (Asia)
+ IST 7200 # Israel Standard Time
+ # (this time zone is not contained in the ZIC database)
+ JAYT 32400 # Jayapura Time (Indonesia) (not in zic)
+ KDT 36000 D # Korean Daylight Time (not in zic)
+ KGST 21600 D # Kyrgyzstan Summer Time
+ # (Asia/Bishkek)
+ KGT 18000 # Kyrgyzstan Time
+ # (Asia/Bishkek)
+ KRAST 28800 D # Krasnoyarsk Summer Time
+ # (Asia/Krasnoyarsk)
+ KRAT 25200 # Krasnoyarsk Time
+ # (Asia/Krasnoyarsk)
+ KST 32400 # Korean Standard Time
+ # (Asia/Pyongyang)
+ LKT 21600 # Lanka Time
+ # (Asia/Colombo)
+ MAGST 43200 D # Magadan Summer Time
+ # (Asia/Magadan)
+ MAGT 39600 # Magadan Time
+ # (Asia/Magadan)
+ MMT 23400 # Myanmar Time
+ # (Asia/Rangoon)
+ MYT 28800 # Malaysia Time
+ # (Asia/Kuala_Lumpur)
+ # (Asia/Kuching)
+ NOVST 25200 D # Novosibirsk Summer Time
+ # (Asia/Novosibirsk)
+ NOVT 21600 # Novosibirsk Time
+ # (Asia/Novosibirsk)
+ NPT 20700 # Nepal Time
+ # (Asia/Katmandu)
+ OMSST 25200 D # Omsk Summer Time
+ # (Asia/Omsk)
+ OMST 21600 # Omsk Time
+ # (Asia/Omsk)
+ ORAT 18000 # Oral Time
+ # (Asia/Oral)
+ PETST 46800 D # Petropavlovsk-Kamchatski Summer Time
+ # (Asia/Kamchatka)
+ PETT 43200 # Petropavlovsk-Kamchatski Time
+ # (Asia/Kamchatka)
+ PHT 28800 # Phillipine Time (not in zic)
+ PKT 18000 # Pakistan Time (not in zic)
+ QYZT 21600 # Kizilorda Time
+ # (Asia/Qyzylorda)
+ SAKST 39600 D # Sakhalin Summer Time
+ # (Asia/Sakhalin)
+ SAKT 36000 # Sakhalin Time
+ # (Asia/Sakhalin)
+ SGT 28800 # Singapore Time
+ # (Asia/Singapore)
+ TJT 18000 # Tajikistan Time
+ # (Asia/Dushanbe)
+ TLT 32400 # East Timor Time
+ # (Asia/Dili)
+ TMT 18000 # Turkmenistan Time
+ # (Asia/Ashgabat)
+ ULAST 32400 D # Ulan Bator Summer Time
+ # (Asia/Ulaanbaatar)
+ ULAT 28800 # Ulan Bator Time
+ # (Asia/Ulaanbaatar)
+ UZST 21600 D # Uzbekistan Summer Time
+ # (Asia/Samarkand)
+ # (Asia/Tashkent)
+ UZT 18000 # Uzbekistan Time
+ # (Asia/Samarkand)
+ # (Asia/Tashkent)
+ VLAST 39600 D # Vladivostok Summer Time
+ # (Asia/Vladivostok)
+ VLAT 36000 # Vladivostok Time
+ # (Asia/Vladivostok)
+ WIT 25200 # Waktu Indonesia Timur
+ # West Indonesia Time
+ # (Asia/Jakarta)
+ # (Asia/Pontianak)
+ YAKST 36000 D # Yakutsk Summer Time
+ # (Asia/Yakutsk)
+ YAKT 32400 # Yakutsk Time
+ # (Asia/Yakutsk)
+ YEKST 21600 D # Yekaterinburg Summer Time
+ # (Asia/Yekaterinburg)
+ YEKT 18000 # Yekaterinburg Time
+ # (Asia/Yekaterinburg)
diff -cNr cvs/pgsql/src/timezone/tznames/templates/Atlantic.txt cvs.build/pgsql/src/timezone/tznames/templates/Atlantic.txt
*** cvs/pgsql/src/timezone/tznames/templates/Atlantic.txt 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/templates/Atlantic.txt 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,100 ----
+ #
+ # NOTE:
+ # This file is NOT loaded by the PostgreSQL database. It just serves as a
+ # template for timezones you could need.
+ #
+ # To add a timezone abbreviation, copy the definition from here to
+ # ../sets/<YourSetName> and specify
+ #
+ # timezone_abbreviations = '<YourSetName>'
+ #
+ # in postgresql.conf. See the existing files in ../sets for information on
+ # how to include other files and how to override timezone abbreviations from
+ # the default set.
+ #
+
+ # CONFLICT! ADT is not unique
+ # Other timezones:
+ # - ADT: Arabic Daylight Time (Asia)
+ ADT -10800 D # Atlantic Daylight Time
+ # (America/Glace_Bay)
+ # (America/Goose_Bay)
+ # (America/Halifax)
+ # (America/Thule)
+ # (Atlantic/Bermuda)
+ # CONFLICT! AST is not unique
+ # Other timezones:
+ # - AST: Arabic Standard Time (Asia)
+ # - AST: Al Manamah Standard Time (Asia) same offset as Arabia Standard Time
+ # - AST/ACT: Acre Standard Time (America) listed as ACT
+ # - AST: Anguilla Standard Time (America) same offset
+ # - AST: Antigua Standard Time (America) same offset
+ # - AST: Antilles Standard Time (America) same offset
+ AST -14400 # Atlantic Standard Time
+ # (America/Anguilla)
+ # (America/Antigua)
+ # (America/Aruba)
+ # (America/Curacao)
+ # (America/Dominica)
+ # (America/Glace_Bay)
+ # (America/Goose_Bay)
+ # (America/Grenada)
+ # (America/Guadeloupe)
+ # (America/Halifax)
+ # (America/Martinique)
+ # (America/Montserrat)
+ # (America/Port_of_Spain)
+ # (America/Puerto_Rico)
+ # (America/Santo_Domingo)
+ # (America/St_Kitts)
+ # (America/St_Lucia)
+ # (America/St_Thomas)
+ # (America/St_Vincent)
+ # (America/Thule)
+ # (America/Tortola)
+ # (Atlantic/Bermuda)
+ AZOST 0 D # Azores Summer Time
+ # (Atlantic/Azores)
+ AZOT -3600 # Azores Time
+ # (Atlantic/Azores)
+ CVT -3600 # Cape Verde Time
+ # (Atlantic/Cape_Verde)
+ FKST -10800 D # Falkland Islands Summer Time
+ # (Atlantic/Stanley)
+ FKT -14400 # Falkland Islands Time
+ # (Atlantic/Stanley)
+ GMT 0 # Greenwich Mean Time
+ # (Africa/Abidjan)
+ # (Africa/Bamako)
+ # (Africa/Banjul)
+ # (Africa/Bissau)
+ # (Africa/Conakry)
+ # (Africa/Dakar)
+ # (Africa/Lome)
+ # (Africa/Monrovia)
+ # (Africa/Nouakchott)
+ # (Africa/Ouagadougou)
+ # (Africa/Sao_Tome)
+ # (America/Danmarkshavn)
+ # (Atlantic/Reykjavik)
+ # (Atlantic/St_Helena)
+ # (Etc/GMT)
+ # (Europe/Dublin)
+ # (Europe/London)
+ # CONFLICT! GST is not unique
+ # Other timezones:
+ # - GST: Gulf Standard Time (Asia)
+ GST -7200 # South Georgia Time (Atlantic)
+ # (Atlantic/South_Georgia)
+ WEST 3600 D # Western Europe Summer Time
+ # (Atlantic/Canary)
+ # (Atlantic/Faeroe)
+ # (Atlantic/Madeira)
+ # (Europe/Lisbon)
+ WET 0 # Western Europe Time
+ # (Africa/Casablanca)
+ # (Africa/El_Aaiun)
+ # (Atlantic/Canary)
+ # (Atlantic/Faeroe)
+ # (Atlantic/Madeira)
+ # (Europe/Lisbon)
diff -cNr cvs/pgsql/src/timezone/tznames/templates/Australia.txt cvs.build/pgsql/src/timezone/tznames/templates/Australia.txt
*** cvs/pgsql/src/timezone/tznames/templates/Australia.txt 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/templates/Australia.txt 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,67 ----
+ #
+ # NOTE:
+ # This file is NOT loaded by the PostgreSQL database. It just serves as a
+ # template for timezones you could need.
+ #
+ # To add a timezone abbreviation, copy the definition from here to
+ # ../sets/<YourSetName> and specify
+ #
+ # timezone_abbreviations = '<YourSetName>'
+ #
+ # in postgresql.conf. See the existing files in ../sets for information on
+ # how to include other files and how to override timezone abbreviations from
+ # the default set.
+ #
+
+ ACSST 37800 D # Central Australia (not in zic)
+ # CONFLICT! ACST is not unique
+ # Other timezones:
+ # - ACST: Acre Summer Time (America)
+ ACST 34200 # Central Australia Standard Time (not in zic)
+ AESST 39600 D # Australia Eastern Summer Standard Time (not in zic)
+ AEST 36000 # Australia Eastern Standard Time (not in zic)
+ AWSST 32400 D # Australia Western Summer Standard Time (not in zic)
+ AWST 28800 # Australia Western Standard Time (not in zic)
+ CADT 37800 D # Central Australia Daylight-Saving Time (not in zic)
+ CAST 34200 # Central Australia Standard Time (not in zic)
+ # CONFLICT! CST is not unique
+ # Other timezones:
+ # - CST: Central Standard Time (America)
+ # - CST: Cuba Central Standard Time (America)
+ CST 34200 # Central Standard Time (Australia)
+ # (Australia/Adelaide)
+ # (Australia/Broken_Hill)
+ # CONFLICT! EAST is not unique
+ # Other timezones:
+ # - EAST: Easter Island Time (Chile) (Pacific)
+ EAST 36000 # East Australian Standard Time (not in zic)
+ # CONFLICT! EST is not unique
+ # Other timezones:
+ # - EST: Eastern Standard Time (America)
+ EST 36000 # Eastern Standard Time (Australia)
+ # (Australia/Currie)
+ # (Australia/Hobart)
+ # (Australia/Melbourne)
+ # (Australia/Sydney)
+ # (Australia/Currie)
+ # (Australia/Hobart)
+ # (Australia/Melbourne)
+ # (Australia/Sydney)
+ LHDT 39600 D # Lord Howe Daylight Time, Australia (not in zic)
+ LHST 37800 # Lord Howe Standard Time (Australia)
+ # (Australia/Lord_Howe)
+ LIGT 36000 # Melbourne, Australia (not in zic)
+ NZT 43200 # New Zealand Time (not in zic)
+ SADT 37800 D # South Australian Daylight-Saving Time (not in zic)
+ SAST 34200 # South Australian Standard Time (not in zic)
+ SAT 34200 # South Australian Standard Time (not in zic)
+ WADT 28800 D # West Australian Daylight-Saving Time (not in zic)
+ WAST 25200 # West Australian Standard Time (not in zic)
+ WDT 32400 D # West Australian Daylight-Saving Time (not in zic)
+ # CONFLICT! WST is not unique
+ # Other timezones:
+ # - WST: West Samoa Time
+ WST 28800 # Western Standard Time (Australia)
+ # (Antarctica/Casey)
+ # (Australia/Perth)
+
diff -cNr cvs/pgsql/src/timezone/tznames/templates/Etc.txt cvs.build/pgsql/src/timezone/tznames/templates/Etc.txt
*** cvs/pgsql/src/timezone/tznames/templates/Etc.txt 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/templates/Etc.txt 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,41 ----
+ #
+ # NOTE:
+ # This file is NOT loaded by the PostgreSQL database. It just serves as a
+ # template for timezones you could need.
+ #
+ # To add a timezone abbreviation, copy the definition from here to
+ # ../sets/<YourSetName> and specify
+ #
+ # timezone_abbreviations = '<YourSetName>'
+ #
+ # in postgresql.conf. See the existing files in ../sets for information on
+ # how to include other files and how to override timezone abbreviations from
+ # the default set.
+ #
+
+ GMT 0 # Greenwich Mean Time
+ # (Africa/Abidjan)
+ # (Africa/Bamako)
+ # (Africa/Banjul)
+ # (Africa/Bissau)
+ # (Africa/Conakry)
+ # (Africa/Dakar)
+ # (Africa/Lome)
+ # (Africa/Monrovia)
+ # (Africa/Nouakchott)
+ # (Africa/Ouagadougou)
+ # (Africa/Sao_Tome)
+ # (America/Danmarkshavn)
+ # (Atlantic/Reykjavik)
+ # (Atlantic/St_Helena)
+ # (Etc/GMT)
+ # (Europe/Dublin)
+ # (Europe/London)
+ UCT 0 # Universal Coordinated Time
+ # (Etc/UCT)
+ UT 0 # Universal Time (not in zic)
+ UTC 0 # Coordinated Universal Time
+ # (Etc/UTC)
+ Z 0 # Zulu
+ ZULU 0 # Zulu
+
diff -cNr cvs/pgsql/src/timezone/tznames/templates/Europe.txt cvs.build/pgsql/src/timezone/tznames/templates/Europe.txt
*** cvs/pgsql/src/timezone/tznames/templates/Europe.txt 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/templates/Europe.txt 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,215 ----
+ #
+ # NOTE:
+ # This file is NOT loaded by the PostgreSQL database. It just serves as a
+ # template for timezones you could need.
+ #
+ # To add a timezone abbreviation, copy the definition from here to
+ # ../sets/<YourSetName> and specify
+ #
+ # timezone_abbreviations = '<YourSetName>'
+ #
+ # in postgresql.conf. See the existing files in ../sets for information on
+ # how to include other files and how to override timezone abbreviations from
+ # the default set.
+ #
+
+ BST 3600 D # British Summer Time
+ # Brazil Standard Time
+ # Bering Summer Time
+ # (Europe/London)
+ CEST 7200 D # Central Europe Summer Time
+ # (Africa/Ceuta)
+ # (Europe/Amsterdam)
+ # (Europe/Andorra)
+ # (Europe/Belgrade)
+ # (Europe/Berlin)
+ # (Europe/Brussels)
+ # (Europe/Budapest)
+ # (Europe/Copenhagen)
+ # (Europe/Gibraltar)
+ # (Europe/Luxembourg)
+ # (Europe/Madrid)
+ # (Europe/Malta)
+ # (Europe/Monaco)
+ # (Europe/Oslo)
+ # (Europe/Paris)
+ # (Europe/Prague)
+ # (Europe/Rome)
+ # (Europe/Stockholm)
+ # (Europe/Tirane)
+ # (Europe/Vaduz)
+ # (Europe/Vienna)
+ # (Europe/Warsaw)
+ # (Europe/Zurich)
+ CET 3600 # Central Europe Time
+ # (Africa/Algiers)
+ # (Africa/Ceuta)
+ # (Europe/Amsterdam)
+ # (Europe/Andorra)
+ # (Europe/Belgrade)
+ # (Europe/Berlin)
+ # (Europe/Brussels)
+ # (Europe/Budapest)
+ # (Europe/Copenhagen)
+ # (Europe/Gibraltar)
+ # (Europe/Luxembourg)
+ # (Europe/Madrid)
+ # (Europe/Malta)
+ # (Europe/Monaco)
+ # (Europe/Oslo)
+ # (Europe/Paris)
+ # (Europe/Prague)
+ # (Europe/Rome)
+ # (Europe/Stockholm)
+ # (Europe/Tirane)
+ # (Europe/Vaduz)
+ # (Europe/Vienna)
+ # (Europe/Warsaw)
+ # (Europe/Zurich)
+ CETDST 7200 D # Central Europe Summer Time
+ # (Africa/Ceuta)
+ # (Europe/Amsterdam)
+ # (Europe/Andorra)
+ # (Europe/Belgrade)
+ # (Europe/Berlin)
+ # (Europe/Brussels)
+ # (Europe/Budapest)
+ # (Europe/Copenhagen)
+ # (Europe/Gibraltar)
+ # (Europe/Luxembourg)
+ # (Europe/Madrid)
+ # (Europe/Malta)
+ # (Europe/Monaco)
+ # (Europe/Oslo)
+ # (Europe/Paris)
+ # (Europe/Prague)
+ # (Europe/Rome)
+ # (Europe/Stockholm)
+ # (Europe/Tirane)
+ # (Europe/Vaduz)
+ # (Europe/Vienna)
+ # (Europe/Warsaw)
+ # (Europe/Zurich)
+ EEST 10800 D # East-Egypt Summertime
+ # Eastern Europe Summer Time
+ # (Africa/Cairo)
+ # (Asia/Amman)
+ # (Asia/Beirut)
+ # (Asia/Damascus)
+ # (Asia/Gaza)
+ # (Asia/Nicosia)
+ # (Europe/Athens)
+ # (Europe/Bucharest)
+ # (Europe/Chisinau)
+ # (Europe/Helsinki)
+ # (Europe/Istanbul)
+ # (Europe/Kaliningrad)
+ # (Europe/Kiev)
+ # (Europe/Minsk)
+ # (Europe/Riga)
+ # (Europe/Simferopol)
+ # (Europe/Sofia)
+ # (Europe/Tallinn)
+ # (Europe/Uzhgorod)
+ # (Europe/Vilnius)
+ # (Europe/Zaporozhye)
+ EET 7200 # East-Egypt Time
+ # Eastern Europe Time
+ # (Africa/Cairo)
+ # (Africa/Tripoli)
+ # (Asia/Amman)
+ # (Asia/Beirut)
+ # (Asia/Damascus)
+ # (Asia/Gaza)
+ # (Asia/Nicosia)
+ # (Europe/Athens)
+ # (Europe/Bucharest)
+ # (Europe/Chisinau)
+ # (Europe/Helsinki)
+ # (Europe/Istanbul)
+ # (Europe/Kaliningrad)
+ # (Europe/Kiev)
+ # (Europe/Minsk)
+ # (Europe/Riga)
+ # (Europe/Simferopol)
+ # (Europe/Sofia)
+ # (Europe/Tallinn)
+ # (Europe/Uzhgorod)
+ # (Europe/Vilnius)
+ # (Europe/Zaporozhye)
+ EETDST 10800 D # East-Egypt Summertime
+ # Eastern Europe Summer Time
+ # (Africa/Cairo)
+ # (Asia/Amman)
+ # (Asia/Beirut)
+ # (Asia/Damascus)
+ # (Asia/Gaza)
+ # (Asia/Nicosia)
+ # (Europe/Athens)
+ # (Europe/Bucharest)
+ # (Europe/Chisinau)
+ # (Europe/Helsinki)
+ # (Europe/Istanbul)
+ # (Europe/Kaliningrad)
+ # (Europe/Kiev)
+ # (Europe/Minsk)
+ # (Europe/Riga)
+ # (Europe/Simferopol)
+ # (Europe/Sofia)
+ # (Europe/Tallinn)
+ # (Europe/Uzhgorod)
+ # (Europe/Vilnius)
+ # (Europe/Zaporozhye)
+ GMT 0 # Greenwich Mean Time
+ # (Africa/Abidjan)
+ # (Africa/Bamako)
+ # (Africa/Banjul)
+ # (Africa/Bissau)
+ # (Africa/Conakry)
+ # (Africa/Dakar)
+ # (Africa/Lome)
+ # (Africa/Monrovia)
+ # (Africa/Nouakchott)
+ # (Africa/Ouagadougou)
+ # (Africa/Sao_Tome)
+ # (America/Danmarkshavn)
+ # (Atlantic/Reykjavik)
+ # (Atlantic/St_Helena)
+ # (Etc/GMT)
+ # (Europe/Dublin)
+ # (Europe/London)
+ # CONFLICT! IST is not unique
+ # Other timezones:
+ # - IST: Indian Standard Time (Asia)
+ # - IST: Israel Standard Time (Asia)
+ IST 3600 D # Irish Summer Time
+ # (Europe/Dublin)
+ MEST 7200 D # Middle Europe Summer Time (not in zic)
+ MET 3600 # Middle Europe Time (not in zic)
+ METDST 7200 D # Middle Europe Summer Time (not in zic)
+ MEZ 3600 # Mitteleuropäische Zeit (German) (not in zic)
+ MSD 14400 D # Moscow Daylight Time
+ # (Europe/Moscow)
+ MSK 10800 # Moscow Time
+ # (Europe/Moscow)
+ SAMST 18000 D # Samara Summer Time
+ # (Europe/Samara)
+ SAMT 14400 # Samara Time
+ # (Europe/Samara)
+ WEST 3600 D # Western Europe Summer Time
+ # (Atlantic/Canary)
+ # (Atlantic/Faeroe)
+ # (Atlantic/Madeira)
+ # (Europe/Lisbon)
+ WET 0 # Western Europe Time
+ # (Africa/Casablanca)
+ # (Africa/El_Aaiun)
+ # (Atlantic/Canary)
+ # (Atlantic/Faeroe)
+ # (Atlantic/Madeira)
+ # (Europe/Lisbon)
+ WETDST 3600 D # Western Europe Summer Time
+ # (Atlantic/Canary)
+ # (Atlantic/Faeroe)
+ # (Atlantic/Madeira)
+ # (Europe/Lisbon)
diff -cNr cvs/pgsql/src/timezone/tznames/templates/Indian.txt cvs.build/pgsql/src/timezone/tznames/templates/Indian.txt
*** cvs/pgsql/src/timezone/tznames/templates/Indian.txt 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/templates/Indian.txt 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,43 ----
+ #
+ # NOTE:
+ # This file is NOT loaded by the PostgreSQL database. It just serves as a
+ # template for timezones you could need.
+ #
+ # To add a timezone abbreviation, copy the definition from here to
+ # ../sets/<YourSetName> and specify
+ #
+ # timezone_abbreviations = '<YourSetName>'
+ #
+ # in postgresql.conf. See the existing files in ../sets for information on
+ # how to include other files and how to override timezone abbreviations from
+ # the default set.
+ #
+
+ CCT 23400 # Cocos Islands Time (Indian Ocean)
+ # (Indian/Cocos)
+ CXT 25200 # Christmas Island Time (Indian Ocean)
+ # (Indian/Christmas)
+ EAT 10800 # East Africa Time
+ # (Africa/Addis_Ababa)
+ # (Africa/Asmera)
+ # (Africa/Dar_es_Salaam)
+ # (Africa/Djibouti)
+ # (Africa/Kampala)
+ # (Africa/Khartoum)
+ # (Africa/Mogadishu)
+ # (Africa/Nairobi)
+ # (Indian/Antananarivo)
+ # (Indian/Comoro)
+ # (Indian/Mayotte)
+ IOT 21600 # British Indian Ocean Territory (Chagos) (there was a timezone change recently in 1996)
+ # (Indian/Chagos)
+ MUT 14400 # Mauritius Island Time
+ # (Indian/Mauritius)
+ MVT 18000 # Maldives Island Time
+ # (Indian/Maldives)
+ RET 14400 # Reunion Time
+ # (Indian/Reunion)
+ SCT 14400 # Seychelles Time
+ # (Indian/Mahe)
+ TFT 18000 # Kerguelen Time
+ # (Indian/Kerguelen)
diff -cNr cvs/pgsql/src/timezone/tznames/templates/Pacific.txt cvs.build/pgsql/src/timezone/tznames/templates/Pacific.txt
*** cvs/pgsql/src/timezone/tznames/templates/Pacific.txt 1970-01-01 01:00:00.000000000 +0100
--- cvs.build/pgsql/src/timezone/tznames/templates/Pacific.txt 2006-07-13 18:06:01.000000000 +0200
***************
*** 0 ****
--- 1,108 ----
+ #
+ # NOTE:
+ # This file is NOT loaded by the PostgreSQL database. It just serves as a
+ # template for timezones you could need.
+ #
+ # To add a timezone abbreviation, copy the definition from here to
+ # ../sets/<YourSetName> and specify
+ #
+ # timezone_abbreviations = '<YourSetName>'
+ #
+ # in postgresql.conf. See the existing files in ../sets for information on
+ # how to include other files and how to override timezone abbreviations from
+ # the default set.
+ #
+
+ CHADT 49500 D # Chatham Daylight Time (New Zealand)
+ # (Pacific/Chatham)
+ CHAST 45900 # Chatham Standard Time (New Zealand)
+ # (Pacific/Chatham)
+ ChST 36000 # Chamorro Standard Time (lower case "h" is as in zic)
+ # (Pacific/Guam)
+ # (Pacific/Saipan)
+ CKT 43200 # Cook Islands Time (not in zic)
+ EASST -18000 D # Easter Island Summer Time (Chile)
+ # (Pacific/Easter)
+ # CONFLICT! EAST is not unique
+ # Other timezones:
+ # - EAST: East Australian Standard Time (Australia)
+ EAST -21600 # Easter Island Time (Chile)
+ # (Pacific/Easter)
+ FJST -46800 D # Fiji Summer Time (not in zic)
+ FJT -43200 # Fiji Time (not in zic)
+ GALT -21600 # Galapagos Time
+ # (Pacific/Galapagos)
+ GAMT -32400 # Gambier Time
+ # (Pacific/Gambier)
+ GILT 43200 # Gilbert Islands Time
+ # (Pacific/Tarawa)
+ HST -36000 # Hawaiian Standard Time
+ # (Pacific/Honolulu)
+ # (Pacific/Johnston)
+ KOST 39600 # Kosrae Time
+ # (Pacific/Kosrae)
+ LINT 50400 # Line Islands Time (Kiribati)
+ # (Pacific/Kiritimati)
+ MART -34200 # Marquesas Time
+ # (Pacific/Marquesas)
+ MHT 43200 # Kwajalein Time
+ # (Pacific/Kwajalein)
+ # (Pacific/Majuro)
+ MPT 36000 # North Mariana Islands Time (not in zic)
+ NCT 39600 # New Caledonia Time (not in zic)
+ # CONFLICT! NFT is not unique
+ # Other timezones:
+ # - NFT: Newfoundland Time (America)
+ NFT 41400 # Norfolk Time
+ # (Pacific/Norfolk)
+ NRT 43200 # Nauru Time
+ # (Pacific/Nauru)
+ NUT -39600 # Niue Time
+ # (Pacific/Niue)
+ NZDT 46800 D # New Zealand Daylight Time
+ # (Antarctica/McMurdo)
+ # (Pacific/Auckland)
+ NZST 43200 # New Zealand Standard Time
+ # (Antarctica/McMurdo)
+ # (Pacific/Auckland)
+ PGT 36000 # Papua New Guinea Time
+ # (Pacific/Port_Moresby)
+ PHOT 46800 # Phoenix Islands Time (Kiribati)
+ # (Pacific/Enderbury)
+ PONT 39600 # Ponape Time (Micronesia)
+ # (Pacific/Ponape)
+ PST -28800 # Pacific Standard Time
+ # (America/Dawson)
+ # (America/Los_Angeles)
+ # (America/Tijuana)
+ # (America/Vancouver)
+ # (America/Whitehorse)
+ # (Pacific/Pitcairn)
+ PWT 32400 # Palau Time
+ # (Pacific/Palau)
+ SBT 39600 # Solomon Islands Time
+ # (Pacific/Guadalcanal)
+ SST -39600 # South Sumatran Time
+ # (Pacific/Midway)
+ # (Pacific/Pago_Pago)
+ TAHT -36000 # Tahiti Time (zic says "TAHT", other sources "THAT")
+ # (Pacific/Tahiti)
+ TKT -36000 # Tokelau Time
+ # (Pacific/Fakaofo)
+ TOT 46800 # Tonga Time (not in zic)
+ TRUT 36000 # Truk Time (zic says "TRUT", other souces say "TRUK")
+ # (Pacific/Truk)
+ TVT 43200 # Tuvalu Time
+ # (Pacific/Funafuti)
+ VUT 39600 # Vanuata Time (not in zic)
+ WAKT 43200 # Wake Time
+ # (Pacific/Wake)
+ WFT 43200 # Wallis and Futuna Time
+ # (Pacific/Wallis)
+ # CONFLICT! WST is not unique
+ # Other timezones:
+ # - WST: Western Standard Time (Australia)
+ WST -39600 # West Samoa Time
+ # (Pacific/Apia)
+ YAPT 36000 # Yap Time (Micronesia) (not in zic)
+
"Joachim Wieland" <joe@mcknight.de> writes:
Here's the patch that generalizes the australian_timezones hack by moving the
compiled-in time zone definitions into a text file. The text file to use is
chosen via a guc.
Applied with some revisions --- mostly, that I didn't like restricting
timezone_abbreviations to be changed only via postgresql.conf. The old
australian_timezones setting was always USERSET, and I think people
would have had a legitimate gripe about loss of flexibility if its
replacement wasn't. Fortunately this wasn't too hard to change. I also
editorialized a bit on the file placement and the parsing code.
The documentation is still in need of help ... in particular, Table B-4
(timezone names) is now out of sync with reality. I am not sure whether
to try to fix it, or just remove it and tell people to look at the
pg_timezonenames view. Thoughts? If you want to fix it, please send
a patch.
regards, tom lane
On Mon, Jul 24, 2006 at 11:59:34PM -0400, Tom Lane wrote:
"Joachim Wieland" <joe@mcknight.de> writes:
Here's the patch that generalizes the australian_timezones hack by
moving the compiled-in time zone definitions into a text file. The
text file to use is chosen via a guc.Applied with some revisions --- mostly, that I didn't like
restricting timezone_abbreviations to be changed only via
postgresql.conf. The old australian_timezones setting was always
USERSET, and I think people would have had a legitimate gripe about
loss of flexibility if its replacement wasn't. Fortunately this
wasn't too hard to change. I also editorialized a bit on the file
placement and the parsing code.The documentation is still in need of help ... in particular, Table
B-4 (timezone names) is now out of sync with reality. I am not sure
whether to try to fix it, or just remove it and tell people to look
at the pg_timezonenames view. Thoughts? If you want to fix it,
please send a patch.
I'll take a whack at that patch this evening PDT or tomorrow evening
at the latest. We're too late in the cycle to go over this, but maybe
we can figure out a way to have this data read from the same data
source as the pg_timezones VIEW does at compile time. Keeping two
such table in synch seems error-prone.
Cheers,
D
--
David Fetter <david@fetter.org> http://fetter.org/
phone: +1 415 235 3778 AIM: dfetter666
Skype: davidfetter
Remember to vote!
David Fetter <david@fetter.org> writes:
On Mon, Jul 24, 2006 at 11:59:34PM -0400, Tom Lane wrote:
The documentation is still in need of help ... in particular, Table
B-4 (timezone names) is now out of sync with reality.
I'll take a whack at that patch this evening PDT or tomorrow evening
at the latest. We're too late in the cycle to go over this, but maybe
we can figure out a way to have this data read from the same data
source as the pg_timezones VIEW does at compile time. Keeping two
such table in synch seems error-prone.
Well, the problem is exactly that there is no "same data source"
anymore: the local DBA can customize the timezone list all he wants.
We could document what the out-of-the-box settings are, but is it
really useful to duplicate that info in the SGML docs? We don't
for example provide a copy of psql \df+ output in the SGML docs,
and I'm wondering if this isn't kind of the same animal.
regards, tom lane
On Tue, Jul 25, 2006 at 10:37:20PM -0400, Tom Lane wrote:
David Fetter <david@fetter.org> writes:
I'll take a whack at that patch this evening PDT or tomorrow evening
at the latest. We're too late in the cycle to go over this, but maybe
we can figure out a way to have this data read from the same data
source as the pg_timezones VIEW does at compile time. Keeping two
such table in synch seems error-prone.
Well, the problem is exactly that there is no "same data source"
anymore: the local DBA can customize the timezone list all he wants.
We could document what the out-of-the-box settings are, but is it
really useful to duplicate that info in the SGML docs? We don't
for example provide a copy of psql \df+ output in the SGML docs,
and I'm wondering if this isn't kind of the same animal.
I'd vote for not including it. The current table is way out of sync already.
I first chose the timezones for the "Default"-set based on this table in the
docs but then I noticed that the table does not really reflect the timezones
in the source code. With the view it's now almost trivial to keep both
synced but it still is a source of errors. Furthermore since nobody has
complained about the incorrect table so far, I don't think many people care.
And those who do can easily consult the view or the file of the Default set
directly.
Joachim