PostgreSQL数据库中的整数超出范围

时间:2015-11-04 08:52:30

标签: ruby-on-rails postgresql activerecord

我试图保存一个代表文件长度的数字(4825733517)。该列设置为整数。我没有设置任何验证或限制。

RangeError: 4825733517 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4

我应该为此值使用其他列类型吗? (在轨道4.2.4上)

3 个答案:

答案 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

它允许您存储更大的整数。