Re: postgresql 7.3.2 bug on date '1901-12-13' and '1901-12

From: Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Arnold Mavromatis <A(dot)Mavromatis(at)bom(dot)gov(dot)au>, <pgsql-bugs(at)postgresql(dot)org>, Lan Tran <L(dot)Tran(at)bom(dot)gov(dot)au>, "'meg(at)bom(dot)gov(dot)au'" <meg(at)bom(dot)gov(dot)au>, "'aam(at)bom(dot)gov(dot)au'" <aam(at)bom(dot)gov(dot)au>
Subject: Re: postgresql 7.3.2 bug on date '1901-12-13' and '1901-12
Date: 2003-08-21 17:37:58
Message-ID: 20030821103057.L51705-100000@megazone.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

On Thu, 21 Aug 2003, Tom Lane wrote:

> Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com> writes:
> > Hmm, I just got my machine to give a similar failure mode with
> > a slightly wacky input.
>
> Perhaps more to the point:
>
> regression=# select timestamptz '1901/12/13 0:0:0';
> timestamptz
> ---------------------
> 1901-12-13 00:00:00
> (1 row)
>
> regression=# select timestamptz '1901/12/14 0:0:0';
> timestamptz
> ------------------------
> 1901-12-14 00:00:00-05
> (1 row)
>
> Note the lack of timezone in the first output.
>
> It looks like 1901/12/14 is the oldest date for which the system will
> return timezone information; IIRC, this is the oldest date representable
> as a 32-bit time_t. PG implicitly assumes that timestamps before that
> are always GMT.

In my case the 23:59:59.99999 vs .99999999999 means that in one case the
system correctly determines that there's no timezone. In the latter, it
thinks there's no timezone on input (because it hasn't added the
fractional seconds), but that ends up rounding up so that on output it
thinks it's on the 14th and therefore has timezone info (the
IS_VALID_UTIME check) and does the timezone thus giving back a time on the
13th with a timezone. It's basically a wierd edge case we get wrong.

> This still doesn't explain why Arnold sees a failure with to_date and
> we don't, though.

I think it comes from (from his machine)

db1=> select timestamptz '1901/12/14';
timestamptz
---------------------
1901-12-13 13:00:00
(1 row)

I'm not sure what that's happening though. He may need to go through with
the debugger.

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Stephan Szabo 2003-08-21 17:52:24 Re: postgresql 7.3.2 bug on date '1901-12-13' and '1901-12
Previous Message mike 2003-08-21 16:30:06 Re: index not used afer VACUUM ANALYZE

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2003-08-21 17:42:30 Re: Can't find thread on Linux memory overcommit
Previous Message Stephan Szabo 2003-08-21 17:28:53 Re: "SELECT IN" Still Broken in 7.4b