我试图保存一个代表文件长度的数字(4825733517)。该列设置为整数。我没有设置任何验证或限制。
RangeError: 4825733517 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4
我应该为此值使用其他列类型吗? (在轨道4.2.4上)
答案 0 :(得分:25)
对于integer
类型的列,:limit
值是以字节为单位的最大列长度(documentation)。
长度为4个字节,您可以存储的最大有符号整数是2,147,483,647,小于您的值4,825,733,517。您可以增加字节限制,例如将8个字节增加为一个长整数(bigint PostgreSQL type),这将允许您存储最多9,223,372,036,854,775,807的有符号值。
您可以使用rails generate migration change_integer_limit_in_your_table
创建迁移以及以下代码来执行此操作:
class ChangeIntegerLimitInYourTable < ActiveRecord::Migration
def change
change_column :your_table, :your_column, :integer, limit: 8
end
end
答案 1 :(得分:4)
根据the PostgreSQL documentation,整数的范围为-2147483648到+2147483647。所以这个类型的数量很大。
更新您的专栏并使用参数限制表示您希望拥有bigint
。
change_column :table, :column, :integer, limit: 8
答案 2 :(得分:0)
您应该使用迁移更改数据库中列的长度:
update_column :my_table, :my_column, :integer, limit: 12
它允许您存储更大的整数。