Re: [GENERAL] Different exponent in error messages - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: [GENERAL] Different exponent in error messages |
Date | |
Msg-id | 200601232002.k0NK2Mp20081@candle.pha.pa.us Whole thread Raw |
Responses |
Re: [GENERAL] Different exponent in error messages
|
List | pgsql-patches |
Tom Lane wrote: > Michael Fuhr <mike@fuhr.org> writes: > > I think this is what Andrus is seeing: > > > test=> CREATE TABLE foo (n numeric(9,3)); > > CREATE TABLE > > test=> INSERT INTO foo VALUES (1000000); > > ERROR: numeric field overflow > > DETAIL: The absolute value is greater than or equal to 10^6 for field with precision 9, scale 3. > > test=> INSERT INTO foo VALUES (1000000000); > > ERROR: numeric field overflow > > DETAIL: The absolute value is greater than or equal to 10^9 for field with precision 9, scale 3. > > Hm, I thought I tested that same case, but I must've messed up somehow. > > Anyway, the code seems to be intentionally reporting the log10 of the > actual input value, not the limiting log10 for the field size. This > behavior goes at least as far back as PG 7.0, so I'm disinclined to > change it. We could talk about altering the message wording though, > if you have a suggestion for something you'd find less confusing. > Pre-7.4 versions say > > ERROR: overflow on numeric ABS(value) >= 10^9 for field with precision 9 scale 3 > > so it looks like we just fixed the grammar during the 7.4 message > wording cleanup, without reflecting about whether the meaning was clear. Yes, this message clearly needs help. Here is what I developed: test=> CREATE TABLE foo (n numeric(9,3)); CREATE TABLE test=> INSERT INTO foo VALUES (10000000); ERROR: numeric field overflow DETAIL: A field with precision 9, scale 3 must have an absolute value less than 10^6. and the 10^6 is based on the max digits to the left of the decimal point, not the input value. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: src/backend/utils/adt/numeric.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v retrieving revision 1.88 diff -c -c -r1.88 numeric.c *** src/backend/utils/adt/numeric.c 22 Nov 2005 18:17:23 -0000 1.88 --- src/backend/utils/adt/numeric.c 23 Jan 2006 20:00:54 -0000 *************** *** 3206,3213 **** ereport(ERROR, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("numeric field overflow"), ! errdetail("The absolute value is greater than or equal to 10^%d for field with precision %d,scale %d.", ! ddigits - 1, precision, scale))); break; } ddigits -= DEC_DIGITS; --- 3206,3213 ---- ereport(ERROR, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("numeric field overflow"), ! errdetail("A field with precision %d, scale %d must have an absolute value less than 10^%d.", ! precision, scale, maxdigits))); break; } ddigits -= DEC_DIGITS;
pgsql-patches by date: