Improve numeric overflow error message.

David Fetter
This commit is contained in:
Bruce Momjian 2006-10-03 21:25:56 +00:00
parent 45c8ed96b9
commit 0a42adcc32
2 changed files with 6 additions and 5 deletions

View File

@ -14,7 +14,7 @@
* Copyright (c) 1998-2006, PostgreSQL Global Development Group * Copyright (c) 1998-2006, PostgreSQL Global Development Group
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/numeric.c,v 1.94 2006/07/14 05:28:28 tgl Exp $ * $PostgreSQL: pgsql/src/backend/utils/adt/numeric.c,v 1.95 2006/10/03 21:25:55 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -3217,11 +3217,12 @@ apply_typmod(NumericVar *var, int32 typmod)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
errmsg("numeric field overflow"), errmsg("numeric field overflow"),
errdetail("A field with precision %d, scale %d must have an absolute value less than %s%d.", errdetail("A field with precision %d, scale %d must round to an absolute value less than %s%d.",
precision, scale, precision, scale,
/* Display 10^0 as 1 */ /* Display 10^0 as 1 */
maxdigits ? "10^" : "", maxdigits ? "10^" : "",
maxdigits ? maxdigits : 1))); maxdigits ? maxdigits : 1
)));
break; break;
} }
ddigits -= DEC_DIGITS; ddigits -= DEC_DIGITS;

View File

@ -688,12 +688,12 @@ INSERT INTO fract_only VALUES (1, '0.0');
INSERT INTO fract_only VALUES (2, '0.1'); INSERT INTO fract_only VALUES (2, '0.1');
INSERT INTO fract_only VALUES (3, '1.0'); -- should fail INSERT INTO fract_only VALUES (3, '1.0'); -- should fail
ERROR: numeric field overflow ERROR: numeric field overflow
DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1. DETAIL: A field with precision 4, scale 4 must round to an absolute value less than 1.
INSERT INTO fract_only VALUES (4, '-0.9999'); INSERT INTO fract_only VALUES (4, '-0.9999');
INSERT INTO fract_only VALUES (5, '0.99994'); INSERT INTO fract_only VALUES (5, '0.99994');
INSERT INTO fract_only VALUES (6, '0.99995'); -- should fail INSERT INTO fract_only VALUES (6, '0.99995'); -- should fail
ERROR: numeric field overflow ERROR: numeric field overflow
DETAIL: A field with precision 4, scale 4 must have an absolute value less than 1. DETAIL: A field with precision 4, scale 4 must round to an absolute value less than 1.
INSERT INTO fract_only VALUES (7, '0.00001'); INSERT INTO fract_only VALUES (7, '0.00001');
INSERT INTO fract_only VALUES (8, '0.00017'); INSERT INTO fract_only VALUES (8, '0.00017');
SELECT * FROM fract_only; SELECT * FROM fract_only;