BUG #3607: timestamp is behaving strangely

Started by Cade Cairnsover 18 years ago2 messagesbugs
Jump to latest
#1Cade Cairns
cadec@otii.com

The following bug has been logged online:

Bug reference: 3607
Logged by: Cade Cairns
Email address: cadec@otii.com
PostgreSQL version: 8.1.9
Operating system: Mac OS X 10.4.10
Description: timestamp is behaving strangely
Details:

test=> select '2007-05-11 09:33:01.167885'::timestamp without time zone,
('epoch'::timestamp without time zone + '1178875981.167885
seconds'::interval)::timestamp without time zone;
timestamp | timestamp
----------------------------+----------------------------
2007-05-11 09:33:01.167885 | 2007-05-11 09:33:01.167885
(1 row)

test=> select '2007-05-11 09:33:01.167885'::timestamp without time zone =
('epoch'::timestamp without time zone + '1178875981.167885
seconds'::interval)::timestamp without time zone;
?column?
----------
f
(1 row)

Why?

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Cade Cairns (#1)
Re: BUG #3607: timestamp is behaving strangely

"Cade Cairns" <cadec@otii.com> writes:

test=> select '2007-05-11 09:33:01.167885'::timestamp without time zone,
('epoch'::timestamp without time zone + '1178875981.167885
seconds'::interval)::timestamp without time zone;
timestamp | timestamp
----------------------------+----------------------------
2007-05-11 09:33:01.167885 | 2007-05-11 09:33:01.167885
(1 row)

test=> select '2007-05-11 09:33:01.167885'::timestamp without time zone =
('epoch'::timestamp without time zone + '1178875981.167885
seconds'::interval)::timestamp without time zone;
?column?
----------
f
(1 row)

If you're using floating-point timestamps (which is the default build)
you are up against the limit of accuracy of a standard float8 value.
IOW that's not really exactly 09:33:01.167885, but close to it.
Checking this example shows that the two float timestamps internally
are 232191181.16788501 and 232191181.16788507.

regards, tom lane