Search Postgresql Archives

Re: When it is better to use "timestamp without time zone"?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2006-01-04, Emi Lu <emilu@xxxxxxxxxxxxxxx> wrote:
> OK. When the column is setup as "timestamp with time zone default 
> now()", the default values will be set based on the Operating System, 
> right?

You have to understand that in the current implementation, pg does not
actually store the time zone.

> An example case:
> PostgreSQL server is on machine1, with timezone setup as "-5". A table 
> named test1(col timestamp with time zone default now() );
>
> . insert into test1 from client machine2 with timezone "+2"; the value 
> inserted into machine1 should be "2006-01-04 10:01:01-05" but not 
> "2006-01-04 10:01:01+02" ?

If the client gave the value as '2006-01-04 10:01:01', then the value is
taken to be in whatever the session's timezone setting is. If the client
didn't set that (either on connect, or via a SET command, or as a per-user
or per-database default) then the server's timezone is the default.

It's important in this context to note that "-5" or "+2" don't sufficiently
specify time _zones_ as opposed to _timezone offsets_. When you're talking
about a specific time, you can say '2006-01-04 10:01:01-0500', but to say
that "a machine is in timezone -5" is generally nonsense. In the real world,
you have to take into account DST rules both current and historical, which
the timezone libraries know about.

> . select * from test1 from client machine2, we will get "2006-01-04 
> 10:01:01-05" since the absolute value is saved, which is never caculated 
> again?

The result will be whatever the stored time is _in the session's timezone_.

> . What is the problem here when the column type is setup as "timestamp 
> without time zone"?
>   The value "2006-01-04 10:01:01" is saved and read from both machine1 
> and machine2.

But '2006-01-04 10:01:01' doesn't mean the same thing in two different
timezones.

If what matters is that the result say "10:01:01" regardless of what
timezone the client is in, then you want timestamp without time zone. If
what matters is that the result be the _same time_ regardless of what
timezone, then you want timestamp _with_ time zone. The second case is
vastly more common.

-- 
Andrew, Supernews
http://www.supernews.com - individual and corporate NNTP services


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux