Обсуждение: Numeric overflow problem + patch
Folks, Dennis Björklund and I discovered a little problem with how CVS TIP reports overflows on cast. Please find enclosed a patch which fixes it. Cheers, D -- David Fetter <david@fetter.org> http://fetter.org/ phone: +1 415 235 3778 AIM: dfetter666 Skype: davidfetter Remember to vote!
David Fetter <david@fetter.org> writes: > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1. > [ becomes ] > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1 - 5 * 10^-5. This strikes me as overly pedantic. The message needs to be clear, and the proposed change will just confuse people. regards, tom lane
On Thu, Sep 28, 2006 at 05:11:43PM -0400, Tom Lane wrote: > David Fetter <david@fetter.org> writes: > > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1. > > [ becomes ] > > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1 - 5 * 10^-5. > > This strikes me as overly pedantic. The message needs to be clear, > and the proposed change will just confuse people. I don't know if the code can detect the difference, but a message like: A field with precision 4, scale 4 must *round to* an absolute value less than 1 Since that more accurately describes the actual problem. Have a ncie day, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > From each according to his ability. To each according to his ability to litigate.
On Thu, Sep 28, 2006 at 05:11:43PM -0400, Tom Lane wrote: > David Fetter <david@fetter.org> writes: > > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1. > > [ becomes ] > > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1 - 5 * 10^-5. > > This strikes me as overly pedantic. The message needs to be clear, > and the proposed change will just confuse people. It might, but the error that's currently in there is wrong. With the patch applied, you get: postgres=# SELECT .99995::NUMERIC(4,4); ERROR: numeric field overflow DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1 - 5 * 10^-5. postgres=# SELECT .9999499999999999999999999999::NUMERIC(4,4); numeric --------- 0.9999 (1 row) I'd thought of changing it to the corresponding numeric piece, but this doesn't work so well for NUMERIC(16,8) and the like. Cheers, D -- David Fetter <david@fetter.org> http://fetter.org/ phone: +1 415 235 3778 AIM: dfetter666 Skype: davidfetter Remember to vote!
On Thu, Sep 28, 2006 at 11:16:56PM +0200, Martijn van Oosterhout wrote: > On Thu, Sep 28, 2006 at 05:11:43PM -0400, Tom Lane wrote: > > David Fetter <david@fetter.org> writes: > > > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1. > > > [ becomes ] > > > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1 - 5 * 10^-5. > > > > This strikes me as overly pedantic. The message needs to be > > clear, and the proposed change will just confuse people. > > I don't know if the code can detect the difference, but a message > like: > > A field with precision 4, scale 4 must *round to* an absolute value > less than 1 What does .999 round to? How about .5? > Since that more accurately describes the actual problem. I'd say it doesn't, as worded. Maybe some other wording would be clearer. Cheers, D -- David Fetter <david@fetter.org> http://fetter.org/ phone: +1 415 235 3778 AIM: dfetter666 Skype: davidfetter Remember to vote!
On Thu, Sep 28, 2006 at 11:16:56PM +0200, Martijn van Oosterhout wrote: > On Thu, Sep 28, 2006 at 05:11:43PM -0400, Tom Lane wrote: > > David Fetter <david@fetter.org> writes: > > > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1. > > > [ becomes ] > > > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1 - 5 * 10^-5. > > > > This strikes me as overly pedantic. The message needs to be clear, > > and the proposed change will just confuse people. > > I don't know if the code can detect the difference, but a message like: > > A field with precision 4, scale 4 must *round to* an absolute value less than 1 > > Since that more accurately describes the actual problem. > > Have a ncie day, Per your suggestion, how about this patch? Cheers, D -- David Fetter <david@fetter.org> http://fetter.org/ phone: +1 415 235 3778 AIM: dfetter666 Skype: davidfetter Remember to vote!
Вложения
Patch applied. Thanks. --------------------------------------------------------------------------- David Fetter wrote: > On Thu, Sep 28, 2006 at 11:16:56PM +0200, Martijn van Oosterhout wrote: > > On Thu, Sep 28, 2006 at 05:11:43PM -0400, Tom Lane wrote: > > > David Fetter <david@fetter.org> writes: > > > > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1. > > > > [ becomes ] > > > > ! DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1 - 5 * 10^-5. > > > > > > This strikes me as overly pedantic. The message needs to be clear, > > > and the proposed change will just confuse people. > > > > I don't know if the code can detect the difference, but a message like: > > > > A field with precision 4, scale 4 must *round to* an absolute value less than 1 > > > > Since that more accurately describes the actual problem. > > > > Have a ncie day, > > Per your suggestion, how about this patch? > > Cheers, > D > -- > David Fetter <david@fetter.org> http://fetter.org/ > phone: +1 415 235 3778 AIM: dfetter666 > Skype: davidfetter > > Remember to vote! [ Attachment, skipping... ] > > ---------------------------(end of broadcast)--------------------------- > TIP 9: In versions below 8.0, the planner will ignore your desire to > choose an index scan if your joining column's datatypes do not > match -- Bruce Momjian bruce@momjian.us EnterpriseDB http://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. +