Postgres DB上的整数超出范围

时间:2009-06-16 04:30:01

标签: ruby-on-rails postgresql

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

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

5 个答案:

答案 0 :(得分:56)

当您声明列时,这是迁移中的神奇咒语:

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

:limit =>在这种情况下,8是神奇的,因为当你说整数时,postgres只会签名4字节整数。这使用8字节有符号整数。

答案 1 :(得分:19)

问题是什么?你满溢了。如果你需要大数字,请使用bigint。

http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html

答案 2 :(得分:12)

在Rails中4.在迁移文件中,您可以将列定义为:

t.column :foobar, :bigint

如前面的答案中所述,limit: 8也会实现同样的目标

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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