Commit 0169c354 authored by Tom Lane's avatar Tom Lane

Arrange to install a "posixrules" entry in our timezone database, so that

POSIX-style timezone specs that don't exactly match any database entry will
be treated as having correct USA DST rules.  Also, document that this can
be changed if you want to use some other DST rules with a POSIX zone spec.

We could consider changing localtime.c's TZDEFRULESTRING, but since that
facility can only deal with one DST transition rule, it seems fairly useless
now; might as well just plan to override it using a "posixrules" entry.

Backpatch as far as 8.0.  There isn't much we can do in 7.x ... either your
libc gets it right, or it doesn't.
parent 754148d8
<!-- $PostgreSQL: pgsql/doc/src/sgml/datatype.sgml,v 1.190 2007/02/01 00:28:16 momjian Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/datatype.sgml,v 1.191 2007/03/14 17:38:05 tgl Exp $ -->
<chapter id="datatype"> <chapter id="datatype">
<title id="datatype-title">Data Types</title> <title id="datatype-title">Data Types</title>
...@@ -2243,12 +2243,13 @@ January 8 04:05:06 1999 PST ...@@ -2243,12 +2243,13 @@ January 8 04:05:06 1999 PST
were not already a recognized zone name, it would be accepted and would were not already a recognized zone name, it would be accepted and would
be functionally equivalent to USA East Coast time. When a be functionally equivalent to USA East Coast time. When a
daylight-savings zone name is present, it is assumed to be used daylight-savings zone name is present, it is assumed to be used
according to USA time zone rules, so this feature is of limited use according to the same daylight-savings transition rules used in the
outside North America. One should also be wary that this provision can <literal>zic</> time zone database's <filename>posixrules</> entry.
lead to silently accepting bogus input, since there is no check on the In a standard <productname>PostgreSQL</productname> installation,
reasonableness of the zone abbreviations. For example, <literal>SET <filename>posixrules</> is the same as <literal>US/Eastern</>, so
TIMEZONE TO FOOBAR0</> will work, leaving the system effectively using that POSIX-style time zone specifications follow USA daylight-savings
a rather peculiar abbreviation for GMT. rules. If needed, you can adjust this behavior by replacing the
<filename>posixrules</> file.
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
...@@ -2259,6 +2260,14 @@ January 8 04:05:06 1999 PST ...@@ -2259,6 +2260,14 @@ January 8 04:05:06 1999 PST
rule and so have two possible UTC offsets. rule and so have two possible UTC offsets.
</para> </para>
<para>
One should be wary that the POSIX-style time zone feature can
lead to silently accepting bogus input, since there is no check on the
reasonableness of the zone abbreviations. For example, <literal>SET
TIMEZONE TO FOOBAR0</> will work, leaving the system effectively using
a rather peculiar abbreviation for UTC.
</para>
<para> <para>
In all cases, timezone names are recognized case-insensitively. In all cases, timezone names are recognized case-insensitively.
(This is a change from <productname>PostgreSQL</productname> versions (This is a change from <productname>PostgreSQL</productname> versions
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# Makefile for the timezone library # Makefile for the timezone library
# IDENTIFICATION # IDENTIFICATION
# $PostgreSQL: pgsql/src/timezone/Makefile,v 1.25 2007/02/09 15:56:00 petere Exp $ # $PostgreSQL: pgsql/src/timezone/Makefile,v 1.26 2007/03/14 17:38:06 tgl Exp $
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
...@@ -23,6 +23,10 @@ TZDATA = africa antarctica asia australasia europe northamerica southamerica \ ...@@ -23,6 +23,10 @@ TZDATA = africa antarctica asia australasia europe northamerica southamerica \
pacificnew etcetera factory backward systemv solar87 solar88 solar89 pacificnew etcetera factory backward systemv solar87 solar88 solar89
TZDATAFILES = $(TZDATA:%=$(srcdir)/data/%) TZDATAFILES = $(TZDATA:%=$(srcdir)/data/%)
# which zone should determine the DST rules (not the specific UTC offset!)
# for POSIX-style timezone specs
POSIXRULES = US/Eastern
all: SUBSYS.o submake-libpgport zic all: SUBSYS.o submake-libpgport zic
SUBSYS.o: $(OBJS) SUBSYS.o: $(OBJS)
...@@ -32,7 +36,7 @@ zic: $(ZICOBJS) ...@@ -32,7 +36,7 @@ zic: $(ZICOBJS)
$(CC) $(CFLAGS) $(ZICOBJS) $(LDFLAGS) $(LIBS) -o $@$(X) $(CC) $(CFLAGS) $(ZICOBJS) $(LDFLAGS) $(LIBS) -o $@$(X)
install: all installdirs install: all installdirs
./zic -d '$(DESTDIR)$(datadir)/timezone' $(TZDATAFILES) ./zic -d '$(DESTDIR)$(datadir)/timezone' -p '$(POSIXRULES)' $(TZDATAFILES)
$(MAKE) -C tznames $@ $(MAKE) -C tznames $@
installdirs: installdirs:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment