ruby-on-rails - PostgreSQL 数据库中的整数超出范围

标签 ruby-on-rails postgresql activerecord

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

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

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

最佳答案

对于 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

关于ruby-on-rails - PostgreSQL 数据库中的整数超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33517403/

相关文章:

java - 将 postgres 函数文件放在类路径中并在 Spring Boot 启动事件中执行,这是个好主意吗?

ruby-on-rails - 创建时从嵌入式文档访问父级(Mongoid)

ruby-on-rails - 为什么 find_by 范围在结果为 nil 时返回一个数组

ruby-on-rails - 使用通配符对数组列进行 Activerecord 查询

ruby-on-rails - RSpec View 测试找不到基本命名空间中的部分

ruby-on-rails - 在 Rails 中遍历日期

node.js - 在 node-postgres 模块上显示时区的日期类型

javascript - 如何从 Node.js 快速将许多脚本生成的记录放入 PostgreSQL 中?

ruby-on-rails - ActiveRecord 排除所有查询的结果

ruby-on-rails - Rails Validation numbericality 在表单对象上失败