2009-06-16 72 views
28

使用Postgres DB的简单rails应用程序,尝试插入2176968859时出现'整数超出范围'错误。应该是对迁移的简单修复,但我不确定。现在我有...Postgres DB上的整数超出范围

create_table :targets do |t| 
    t.integer :tid 
    ... 
end 

回答

1

注意在http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html整数类型允许的值的范围内。我认为你将不得不使用bigint,decimal或double精度。

+0

不错,任何想法如何我可以以编程方式获得整数的最大数量,所以我可以设置为零,如果任何人输入一个巨大的数字?我在rails中使用pg gem。 – ryan2johnson9 2017-10-10 03:07:35

+0

@ ryan2johnson9不是非手,但我敢打赌,一些其他问题会回答这个问题;如果没有,请问一个新的 – ysth 2017-10-10 19:07:09

1

PostgreSQL整数签名,没有无符号数据类型 - 我敢打赌,这是你的问题。

如果您需要更大的值,请使用bigint。如果bigint还不够,请使用数字 - 但使用bigint而不是数字,除非您需要更大的尺寸或小数,因为它速度更快。

56

这里的魔法咒语在迁移时声明列:

create_table :example do |t| 
    t.integer :field, :limit => 8 
end 

的:极限=> 8在这种情况下,Postgres的不仅签署了4个字节的整数神奇,当你刚刚说的整数。这使用8个字节的有符号整数。

11

在Rails 4.在迁移文件,你可以定义列:

t.column :foobar, :bigint 

正如在以前的答案指出,limit: 8也能达到同样的事情