【问题标题】:PostgreSQL: how to resolve "numeric field overflow" problemPostgreSQL:如何解决“数值字段溢出”问题
【发布时间】:2011-11-12 12:05:04
【问题描述】:

我有一个具有以下架构的表

COLUMN_NAME, ORDINAL_POSITION,...., NUMERIC_PRECISION_INTEGER
"年";1;"";"是";"数字";;;17;10;17 "month_num";2;"";"YES";"数字";;;17;10;17 "月名";3;"";"是";"文本";;1073741824;;;
"week_of_month";4;"";"YES";"numeric";;;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 的绝对值。

【问题讨论】:

  • 这不是一个模式,而是来自一些内部 postgres 表的转储。如果你有礼貌地产生一些可读的东西,比如 \d 的输出或用于创建这个表的 CREATE TABLE 语句(pgAdmin3 可以帮助你)?此外,声明为 numeric(X,Y) 的字段最多可以使用 X 个位置,其中 Y 位小数在逗号后面。这意味着如果 X=Y 你只能存储
  • 另外,请在您的 INSERT 中包含列列表,这取决于任何特定的列顺序是一个坏主意。

标签: postgresql


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 2021-03-05
      • 1970-01-01
      相关资源
      最近更新 更多