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)
根据PostgreSQL 文档,整数的范围是从 -2147483648 到 +2147483647。所以你的数字对于这种类型来说太大了。
更新您的列并使用参数限制来表明您想要拥有bigint
.
change_column :table, :column, :integer, limit: 8
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8414 次 |
最近记录: |