Обсуждение: Re: [BUGS] bug in timestamp and out of range values

Поиск
Список
Период
Сортировка

Re: [BUGS] bug in timestamp and out of range values

От
Robert Treat
Дата:
On Thursday 02 November 2006 17:48, Tom Lane wrote:
> Robert Treat <xzilla@users.sourceforge.net> writes:
> > pagila=# select to_date('3232098', 'MM/DD/YYYY');
> >     to_date
> > ---------------
> >  4568-06-26 BC
> > (1 row)
>
> to_date's absymal lack of error checking is well known.  It should
> surely refuse that input altogether, given that format string.
> Feel free to send a patch ...
>
> As for the range issue, date_in does refuse negative Julian dates:
>
> regression=# select '4714-01-27 BC'::date;
> ERROR:  date out of range: "4714-01-27 BC"
>
> but again to_date doesn't:
>
> regression=# select to_date('4714-01-27 BC', 'YYYY-MM-DD BC');
>     to_date
> ---------------
>  4714-01-27 BC
> (1 row)
>

I'm not concerned about to_date so much as I am that timestamp_in lets you 
store values you can't read with timestamp_out.  Once the value is in there 
you can happily move it around with create table as and such... 

-- 
Robert Treat
Build A Brighter LAMP :: Linux Apache {middleware} PostgreSQL


Re: [BUGS] bug in timestamp and out of range values

От
"Joshua D. Drake"
Дата:
>> but again to_date doesn't:
>>
>> regression=# select to_date('4714-01-27 BC', 'YYYY-MM-DD BC');
>>     to_date
>> ---------------
>>  4714-01-27 BC
>> (1 row)
>>
> 
> I'm not concerned about to_date so much as I am that timestamp_in lets you 
> store values you can't read with timestamp_out.  Once the value is in there 
> you can happily move it around with create table as and such... 

Hmmm... if that is the case, I would also have a pretty significant
concern. We have basically created an environment that is unreliable
during a restore. Not to mention violating data type constraints.

postgres=# create table timetest (test date);
CREATE TABLE
postgres=# insert into timetest          values (to_date('4714-01-27 BC', 'YYYY-MM-DD BC'));
INSERT 159911984 1

postgres=# select '4714-01-27 BC'::date;
ERROR:  date out of range: "4714-01-27 BC"
postgres=# select cast(test as date) from timetest;    test
---------------4714-01-27 BC
(1 row)

postgres=#
postgres=# select cast('4714-01-27 BC' as date);
ERROR:  date out of range: "4714-01-27 BC"
postgres=#

This seems pretty broken.

Joshua D. Drake






-- 
     === The PostgreSQL Company: Command Prompt, Inc. ===
Sales/Support: +1.503.667.4564 || 24x7/Emergency: +1.800.492.2240
Providing the most comprehensive  PostgreSQL solutions since 1997            http://www.commandprompt.com/

Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate



Re: [BUGS] bug in timestamp and out of range values

От
"Joshua D. Drake"
Дата:
> 
> postgres=# select '4714-01-27 BC'::date;
> ERROR:  date out of range: "4714-01-27 BC"
> postgres=# select cast(test as date) from timetest;
>      test
> ---------------
>  4714-01-27 BC
> (1 row)
> 
> postgres=#
> postgres=# select cast('4714-01-27 BC' as date);
> ERROR:  date out of range: "4714-01-27 BC"
> postgres=#
> 
> This seems pretty broken.
> 
> Joshua D. Drake

And further this with timestamp instead of date:

postgres=# create table timestamptest(test timestamp);
CREATE TABLE
postgres=#  insert into timestamptest           values (to_date('4714-01-27 BC', 'YYYY-MM-DD BC'));
INSERT 159911988 1
postgres=# select * from timestamptest;
ERROR:  timestamp out of range

Sincerely,

Joshua D. Drake


-- 
     === The PostgreSQL Company: Command Prompt, Inc. ===
Sales/Support: +1.503.667.4564 || 24x7/Emergency: +1.800.492.2240
Providing the most comprehensive  PostgreSQL solutions since 1997            http://www.commandprompt.com/

Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate



Re: [BUGS] bug in timestamp and out of range values

От
Tom Lane
Дата:
Robert Treat <xzilla@users.sourceforge.net> writes:
> I'm not concerned about to_date so much as I am that timestamp_in lets you 
> store values you can't read with timestamp_out.

Your example does not demonstrate any such thing.  What it demonstrates
is that to_date will let an out-of-range date into the system, not that
timestamp_in will.  Counterexample:

regression=# select '4714-01-27 BC'::timestamp;
ERROR:  timestamp out of range: "4714-01-27 BC"
        regards, tom lane