PostgreSQL: how to resolve "numeric field overflow" problem
I have a table with the following schema
COLUMN_NAME, ORDINAL_POSITION,...., NUMERIC_PRECISION_INTEGER
"year";1;"";"YES";"numeric";;;17;10;17 "month_num";2;"";"YES";"numeric";;;17;10;17 "month_name";3;"";"YES开发者_如何转开发";"text";;1073741824;;; "week_of_month";4;"";"YES";"numeric";;;17;10;17 "count_of_contracts";5;"";"YES";"bigint";;;64;2;0
but when I insert the following into it
insert into contract_fact values(2011, 8, 'Aug', 1, 367)
I see the following error
ERROR: numeric field overflow
SQL state: 22003 Detail: A field with precision 17, scale 17 must round to an absolute value less than 1.
It looks like you have your year
and week_of_month
columns defined as numeric(17,17)
, which means 17 digits, 17 of which are behind the decimal point. So the value has to be between 0 and 1. You probably meant numeric(17,0)
, or perhaps you should use an integer type.
I had a similar problem even without having set an upper limit. If this happens to you, you might want to look at the global PostgreSQL limits here: https://www.postgresql.org/docs/9.6/static/datatype-numeric.html
For instance TIMESTAMP are a kind of BIGINT with a limit of 9223372036854775807
so you might want to validate that the integer your are passing in your query is below that value.
精彩评论