From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Craig Ringer <craig(at)2ndquadrant(dot)com> |
Cc: | "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: AT TIME ZONE and interval arguments |
Date: | 2013-01-31 16:12:34 |
Message-ID: | 6251.1359648754@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Craig Ringer <craig(at)2ndquadrant(dot)com> writes:
> I'm mildly thrown by this:
> regress=> SELECT TIME '04:00' AT TIME ZONE '01:00';
> [ zone is taken as GMT-1 ]
> regress=> SELECT TIME '04:00' AT TIME ZONE (INTERVAL '01:00');
> [ zone is taken as GMT+1 ]
> and was wondering if anyone knows why the sense of the offset is
> reversed for typed intervals vs bare literal or text.
Well, it's "interval" vs "not interval", and you'll get the same
behavior from SET TIME ZONE:
regression=# set time zone '01:00';
SET
regression=# select now();
now
-------------------------------
2013-01-31 14:57:44.707581-01
(1 row)
regression=# set time zone interval '01:00';
SET
regression=# select now();
now
-------------------------------
2013-01-31 16:57:54.707828+01
(1 row)
so at least AT TIME ZONE isn't off in the weeds by itself.
The sign interpretation in the SET TIME ZONE INTERVAL case is dictated
by the SQL standard. In the non-interval case, we treat the string as
a time zone name, and I think it must be reading it as a POSIX timezone
spec since there is certainly no entry for '01:00' in the Olson tz
database. So yeah, this is another facet of the SQL-vs-POSIX conflict.
BTW, I happened to notice while looking at timetz_izone() that it does
this:
if (zone->month != 0)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("\"interval\" time zone \"%s\" not valid",
DatumGetCString(DirectFunctionCall1(interval_out,
PointerGetDatum(zone))))));
It looks to me like the intent is to reject day-or-more intervals,
as is done in variable.c's check_timezone(). Probably this got missed
when we added the separate day field to intervals. Will fix ...
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Glus Xof | 2013-01-31 16:25:53 | SQL sentence to insert where updated rows is zero... |
Previous Message | Neil Worden | 2013-01-31 15:55:53 | Fwd: naming of wal-archives |