From: | Robert Treat <xzilla(at)users(dot)sourceforge(dot)net> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Cc: | Andrew Chernow <ac(at)esilo(dot)com>, Merlin Moncure <mmoncure(at)gmail(dot)com> |
Subject: | Re: PGparam timestamp question |
Date: | 2007-12-09 16:26:43 |
Message-ID: | 200712091126.44198.xzilla@users.sourceforge.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers pgsql-patches |
On Sunday 09 December 2007 09:44, Andrew Chernow wrote:
> I am trying to add support for timestamps in our proposed libpq PGparam
> patch. I ran into something I don't really understand. I wasn't sure if it
> was my libpq code that was wrong (converts a binary timestamp into a time_t
> or struct tm) so I tried it from psql.
>
> Server is using EST (8.3devel) x86_64 centos 5
>
> TIMESTAMP WITHOUT TIME ZONE appears to be incorrectly adjusting the time.
>
> postgres=# create table t (ts timestamp);
> postgres=# insert into t values (now());
> postgres=# select * from t;
> ts
> ----------------------------
> 2007-12-09 08:00:00.056244
>
> postgres=# select ts at time zone 'UTC' from t;
> timezone
> -------------------------------
> 2007-12-09 03:00:00.056244-05 ====> Shouldn't this be 13:00
>
No. 8 AM UTC is 3 AM Eastern.
>
> TIMESTAMP WITH TIME ZONE returns the result I would expect.
>
> postgres=# create table t (ts timestamp with time zone);
> postgres=# insert into t values (now());
> postgres=# select * from t;
> ts
> ----------------------------
> 2007-12-09 08:00:00.056244
>
> postgres=# select ts at time zone 'UTC' from t;
> timezone
> -------------------------------
> 2007-12-09 13:00:00.056244-05
>
Correspondingly, 8 AM eastern is 1 PM UTC.
>
> Is this expected/desired behavior? If it is, how are timestamps stored
> internally for WITHOUT TIME ZONE types? The docs don't really say. They
> do discuss how WITH TIME ZONE stores things, but WITHOUT is a little blury.
> Maybe I am missing something simple.
>
When timestamptzs are converted to timestamp, there is no time adjust, you
simply lose the tz offset information:
pagila=# select now(), now()::timestamp;
-[ RECORD 1 ]----------------------
now | 2007-12-09 11:25:52.923612-05
now | 2007-12-09 11:25:52.923612
If you store without timezone, you lose the original timezone information, so
selecting out "with time zone" simply selects the stored time in the time
zone you selected. HTH.
--
Robert Treat
Build A Brighter LAMP :: Linux Apache {middleware} PostgreSQL
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Treat | 2007-12-09 16:48:54 | whats the deal with -u ? |
Previous Message | Simon Riggs | 2007-12-09 15:32:17 | Re: BUG #3811: Getting multiple values from a sequence generator |
From | Date | Subject | |
---|---|---|---|
Next Message | Andrew Chernow | 2007-12-09 16:54:25 | Re: PGparam timestamp question |
Previous Message | Andrew Chernow | 2007-12-09 14:44:04 | PGparam timestamp question |