题 Postgres DB上的整数超出范围


使用Postgres DB的简单rails应用程序,在尝试插入2176968859时出现“整数超出范围”错误。应该可以轻松修复迁移,但我不确定。现在我有......

create_table :targets do |t|
   t.integer :tid
    ...
end

28
2018-06-16 04:30


起源




答案:


问题是什么?你满溢了。如果你需要大数字,请使用bigint。

http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html


19
2018-06-16 04:40



谢谢nsanders。 'bigint'就是我想要的。对不起,如果我对每个人的问题都说得不好! - Newy


当您声明列时,这是迁移中的神奇咒语:

create_table :example do |t|
  t.integer :field, :limit => 8
end

:limit => 8在这种情况下是神奇的,因为当你说整数时,postgres只会签名4字节整数。这使用8字节有符号整数。


56
2017-09-17 14:52



我宁愿建议在表格的字段中更改/设置正确的数据类型 - StormByte


在Rails中4.在迁移文件中,您可以将列定义为:

t.column :foobar, :bigint

如前面的答案所述, limit: 8 也将实现同样的目标


12
2017-11-20 19:08





请注意整数类型的允许值范围 http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html。我认为你将不得不使用bigint,decimal或double precision。


1
2018-06-16 04:41



很好,任何想法如何以编程方式获取整数的最大数量所以如果有人输入一个巨大的数字我可以设置为零?我在rails中使用pg gem。 - ryan2johnson9
@ ryan2johnson9没有随便,但我打赌其他一些问题会回答这个问题;如果没有,请问一个新的 - ysth


PostgreSQL整数是签名的,没有无符号数据类型 - 我打赌这是你的问题。

如果您需要更大的值,请使用bigint。如果bigint还不够,请使用numeric - 但是使用bigint而不是numeric,除非你需要更大的大小或小数,因为它要快得多。


1
2018-06-16 15:13