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

Ash*_*ury 14 postgresql activerecord ruby-on-rails

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

RangeError: 4825733517 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4
Run Code Online (Sandbox Code Playgroud)

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

p4s*_*sh4 27

对于类型的列integer,该:limit值是以字节为单位的最大列长度(文档).

如果长度为4个字节,则可存储的最大有符号整数为2,147,483,647,小于您的值4,825,733,517.您可以增加字节限制,例如将8个字节设置为长整数(bigint PostgreSQL类型),这将允许您存储最多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
Run Code Online (Sandbox Code Playgroud)


Rob*_*bin 5

根据PostgreSQL 文档,整数的范围是从 -2147483648 到 +2147483647。所以你的数字对于这种类型来说太大了。

更新您的列并使用参数限制来表明您想要拥有bigint.

change_column :table, :column, :integer, limit: 8
Run Code Online (Sandbox Code Playgroud)