ファイルの長さを表す数値を保存しようとしています(4825733517)。列は整数型に設定されます。バリデーションや制限はありません。PostgreSQLデータベースの整数が範囲外です
RangeError: 4825733517 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4
この値には他の列タイプを使用する必要がありますか?
ファイルの長さを表す数値を保存しようとしています(4825733517)。列は整数型に設定されます。バリデーションや制限はありません。PostgreSQLデータベースの整数が範囲外です
RangeError: 4825733517 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4
この値には他の列タイプを使用する必要がありますか?
、: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
the PostgreSQL documentationによると、整数の範囲は-2147483648から+2147483647です。だからあなたの番号はこのタイプのために大きいです。
bigint
を指定するには、列を更新し、パラメータ制限を使用します。タイプinteger
の列について
change_column :table, :column, :integer, limit: 8
FYIこれは素晴らしい答えであり、*ほとんど*私のために働いた。何が** **仕事をしたのは、すべて同じ構文ですが、 'update_column'ではなく' change_column'でした。私はRails 4.2.6を使用しているので、おそらく "update_column"は廃止予定です。 –
あなたは絶対に正しいです - 'update_column'は単に間違っています。これを最初に書いたとき、他の答えから間違った手がかりを得ているかもしれません。投稿を編集しました。それを指摘してくれてありがとう – p4sh4