2009-06-16 9 views
28

Postgres DBを使用する単純なレールアプリで、2176968859を挿入しようとすると「整数が範囲外です」エラーが発生します。移行は簡単に行うべきですが、わかりません。今すぐ私は持っている...Postgres DBの整数が範囲外です

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

答えて

1

http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.htmlにおける整数型の許容値の範囲。私はあなたがbigint、十進数、または倍精度を使用する必要があると思う。

+0

いいえ、任意のアイデアどのように私は整数のための最大数をプログラムで得ることができますので、誰も巨大な数値を入力するとnilに設定できますか?私はレールにpg gemを使用します。 – ryan2johnson9

+0

@ ryan2johnson9オフハンドではありませんが、私はいくつかの他の質問に答えるでしょう。そうでない場合は、新しいものを尋ねてください – ysth

1

PostgreSQLの整数は署名されていますが、署名されていないデータ型はありません。

大きな値が必要な場合は、bigintを使用します。 bigintでも十分でない場合は、numericを使用しますが、大きなサイズや小数が必要な場合を除いて、数値よりもbigintを使用してください。あなたが列を宣言するときにここで

56

は、移行中に魔法の呪文だ:

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

:あなただけの整数を言うときはpostgresのみ4バイトの符号付き整数ないよう制限=> 8は、この場合では魔法です。これは、8バイトの符号付き整数を使用します。あなたのように、列を定義することができ

移行ファイルでのRails 4で
+0

テーブルのフィールドで正しいデータ型を変更または設定することをお勧めします – StormByte

11

、:前回の回答で述べたように

t.column :foobar, :bigint 

limit: 8も同じことに