开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜