Thread: BUG #6231: weird to_timestamp behaviour with out of range values
The following bug has been logged online: Bug reference: 6231 Logged by: Henk Enting Email address: h.d.enting@mgrid.net PostgreSQL version: 9.1.1 Operating system: linux x86_64 Description: weird to_timestamp behaviour with out of range values Details: I would expect the to_timestamp function to return an error when I feed it out of range values, e.g. months > 13 and days > 31. Instead it seems to add the surplus to the timestamp and then return it. E.g. 21-21 becomes sept. 22th the next year. psql output: postgres=# select to_timestamp('2011-21-21', 'YYYY-MM-DD'); to_timestamp ------------------------ 2012-09-22 00:00:00+02 (1 row) postgres=# select to_timestamp('2011-21-42', 'YYYY-MM-DD'); to_timestamp ------------------------ 2012-10-13 00:00:00+02 (1 row)
"Henk Enting" <h.d.enting@mgrid.net> writes: > I would expect the to_timestamp function to return an error when I feed it > out of range values, e.g. months > 13 and days > 31. Instead it seems to add > the surplus to the timestamp and then return it. What is your reason for using to_timestamp at all? The timestamp input converter is perfectly capable of dealing with standard formats like yyyy-mm-dd, and it does what most people expect in the way of data validation checks. regards, tom lane
On Wed, Sep 28, 2011 at 11:43 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > "Henk Enting" <h.d.enting@mgrid.net> writes: >> I would expect the to_timestamp function to return an error when I feed = it >> out of range values, e.g. months > 13 and days > 31. Instead it seems to= add >> the surplus to the timestamp and then return it. > > What is your reason for using to_timestamp at all? =A0The timestamp input > converter is perfectly capable of dealing with standard formats like > yyyy-mm-dd, and it does what most people expect in the way of data > validation checks. Well, you might want to insist that the input is in some particular format, rather than just "whatever the input function will accept"... --=20 Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
On Thu, Sep 29, 2011 at 5:39 PM, Robert Haas <robertmhaas@gmail.com> wrote: > On Wed, Sep 28, 2011 at 11:43 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > "Henk Enting" <h.d.enting@mgrid.net> writes: > >> I would expect the to_timestamp function to return an error when I feed > it > >> out of range values, e.g. months > 13 and days > 31. Instead it seems to > add > >> the surplus to the timestamp and then return it. > > > > What is your reason for using to_timestamp at all? The timestamp input > > converter is perfectly capable of dealing with standard formats like > > yyyy-mm-dd, and it does what most people expect in the way of data > > validation checks. > > Well, you might want to insist that the input is in some particular > format, rather than just "whatever the input function will accept"... > Exactly. But I probably can rely on the input function and set the datastyle parameter to make sure I get the right dates (e.g. in our case 07-04-2011is in april, not in july). But still, I think the to_timestamp should throw an error if I put in something like '21-21-2011'. Best Regards, Henk Enting
* Henk Enting (h.d.enting@mgrid.net) wrote: > But still, I think the to_timestamp should throw an error if I put in > something like '21-21-2011'. I agree completely, this is a pretty big bug in my opinion. We don't accept invalid or garbage timestamps in the input function, I don't see any reason why we should be allowing it in to_timestamp(). If the values at the 'MM' location are outside of the valid range, we should be throwing an error. Thanks, Stephen