这是一个使用 PostgreSQL 数据库的简单 Ruby on Rails 应用程序,当我尝试插入 2176968859 时,我收到“整数超出范围”错误。这应该是一个简单的迁移修复,但我不确定。 现在我已经...
create_table :targets do |t|
t.integer :tid
...
end
这是声明列时迁移中的魔法咒语:
create_table :example do |t|
t.integer :field, :limit => 8
end
在这种情况下, :limit => 8 是神奇的,因为当你只说整数时,postgres 只处理带符号的 4 字节整数。这使用 8 字节有符号整数。
问题是什么? 你满溢了。 如果您需要那么大的数字,请使用 bigint。
http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html
在 Rails 4 中。在迁移文件中,您可以将列定义为:
t.column :foobar, :bigint
正如之前的答案中所述,
limit: 8
也将实现同样的目标
PostgreSQL 整数是有符号的,没有无符号的数据类型 - 我敢打赌这就是你的问题。
如果需要更大的值,请使用bigint。如果 bigint 还不够,请使用 numeric - 但使用 bigint 而不是 numeric ,除非您需要更大的大小或小数,因为它要快得多。
请注意http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html中整数类型的允许值范围。 我认为您将不得不使用 bigint、小数或双精度。