Обсуждение: BUG #1180: incorrect date handling
The following bug has been logged online:
Bug reference: 1180
Logged by: Ben Bidner
Email address: vort@wiretapped.net
PostgreSQL version: 7.3.2
Operating system: linux 2.4.20
Description: incorrect date handling
Details:
colony=# CREATE TABLE foo (dtime TIMESTAMP);
CREATE TABLE
colony=# insert into foo values ('2003-12-11 23:59:60.00');
ERROR: Bad timestamp external representation '2003-12-11 23:59:60.00'
colony=# insert into foo values ('2003-12-11 23:59:59.999999');
INSERT 97940618 1
colony=# select * from foo;
dtime
----------------------------
2003-12-11 23:59:59.999999
(1 row)
^-- correct
colony=# insert into foo values ('2003-12-11 23:59:59.9999999');
INSERT 97940623 1
colony=# select * from foo;
dtime
----------------------------
2003-12-11 23:59:59.999999
2003-12-11 23:59:60.00
(1 row)
^-- incorrect
2003-12-11 23:59:60.00 should equal 2003-12-12 00:00:00
under 7.4.2, (had a friend test it out) inserting a timestamp with a time of
23:59:60.00 is allowed, it just increments the day and sets the time to
00:00:00 (as one would expect). However it still allows you to insert the
time as `23:59:59.9999999` and it updates the time (incorrectly) to
`23:59:60.00` instead of incrementing the day and setting the time to
00:00:00 (since 23:59:60 is .. or should be invalid).
vort@wiretapped.net
"PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:
> PostgreSQL version: 7.3.2
> colony=# insert into foo values ('2003-12-11 23:59:60.00');
> ERROR: Bad timestamp external representation '2003-12-11 23:59:60.00'
Use a more recent PG version ... we have fixed a thing or two since
7.3 (in fact 7.3.3 and later versions take this, if I read the CVS logs
aright).
> under 7.4.2, (had a friend test it out) inserting a timestamp with a time of
> 23:59:60.00 is allowed, it just increments the day and sets the time to
> 00:00:00 (as one would expect). However it still allows you to insert the
> time as `23:59:59.9999999` and it updates the time (incorrectly) to
> `23:59:60.00` instead of incrementing the day and setting the time to
> 00:00:00 (since 23:59:60 is .. or should be invalid).
Horsepucky.
regression=# select version();
version
---------------------------------------------------------------
PostgreSQL 7.4.3 on hppa-hp-hpux10.20, compiled by GCC 2.95.3
(1 row)
regression=# select '2003-12-11 23:59:60.00'::timestamp;
timestamp
---------------------
2003-12-12 00:00:00
(1 row)
regards, tom lane
On Tue, 22 Jun 2004, Tom Lane wrote:
> "PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:
> > PostgreSQL version: 7.3.2
>
> > colony=# insert into foo values ('2003-12-11 23:59:60.00');
> > ERROR: Bad timestamp external representation '2003-12-11 23:59:60.00'
>
> Use a more recent PG version ... we have fixed a thing or two since
> 7.3 (in fact 7.3.3 and later versions take this, if I read the CVS logs
> aright).
>
> > under 7.4.2, (had a friend test it out) inserting a timestamp with a time of
> > 23:59:60.00 is allowed, it just increments the day and sets the time to
> > 00:00:00 (as one would expect). However it still allows you to insert the
> > time as `23:59:59.9999999` and it updates the time (incorrectly) to
> > `23:59:60.00` instead of incrementing the day and setting the time to
> > 00:00:00 (since 23:59:60 is .. or should be invalid).
>
> Horsepucky.
>
> regression=# select version();
> version
> ---------------------------------------------------------------
> PostgreSQL 7.4.3 on hppa-hp-hpux10.20, compiled by GCC 2.95.3
> (1 row)
>
> regression=# select '2003-12-11 23:59:60.00'::timestamp;
> timestamp
> ---------------------
> 2003-12-12 00:00:00
> (1 row)
That's not the case he was complaining about for 7.4 though, it was this
case I think (done on my 7.5 system, but...):
sszabo=# select timestamp '2003-12-11 23:59:59.9999999';
timestamp
------------------------
2003-12-11 23:59:60.00
(1 row)
sszabo=# select version();
version
------------------------------------------------------------------------------------------------------------
PostgreSQL 7.5devel on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.2
20020903 (Red Hat Linux 8.0 3.2-7)
(1 row)