PostgreSQL:如何解决“数字字段溢出”问题

时间:2011-09-07 20:35:49

标签: postgresql

我有一个包含以下架构的表

  

COLUMN_NAME,ORDINAL_POSITION,....,NUMERIC_PRECISION_INTEGER
    “年”; 1; “”; “YES”; “数字” ;;; 17; 10; 17   “month_num”; 2; “”; “YES”; “数字” ;;; 17; 10; 17   “MONTH_NAME”; 3 “;”, “YES”, “文本” ;; 1073741824 ;;;
  “WEEK_OF_MONTH”; 4 “;”, “YES”; “数字” ;;; 17; 10; 17个
  “count_of_contracts”; 5; “”; “YES”; “BIGINT” ;;; 64; 2; 0

但是当我将以下内容插入其中时

insert into contract_fact values(2011, 8, 'Aug', 1, 367)  

我看到以下错误

  

错误:数字字段溢出
   SQL状态:22003
   细节:精度为17的字段,标尺17必须舍入到小于1的绝对值。

2 个答案:

答案 0 :(得分:61)

看起来您将yearweek_of_month列定义为numeric(17,17),这意味着17位数字,其中17位在小数点后面。所以值必须介于0和1之间。你可能意味着numeric(17,0),或者你应该使用整数类型。

答案 1 :(得分:0)

即使没有设定上限,我也遇到了类似的问题。 如果您遇到这种情况,可能需要在此处查看全局PostgreSQL限制:https://www.postgresql.org/docs/9.6/static/datatype-numeric.html

例如,TIMESTAMP是一种限制为9223372036854775807的BIGINT,因此您可能希望验证在查询中传递的整数是否低于该值。