Reputation: 40137
This is a a simple Ruby on Rails application using a PostgreSQL database, and I am getting 'integer out of range' error when trying to insert 2176968859. It should be an easy fix to the migrations, but I'm not sure. Right now I've got...
create_table :targets do |t|
t.integer :tid
...
end
Upvotes: 29
Views: 35935
Reputation: 19723
In Ruby on Rails 4, in your migration file, you could define the column as:
t.column :foobar, :bigint
As noted in previous answers, limit: 8
will also achieve the same thing.
Upvotes: 12
Reputation: 25178
PostgreSQL integers are signed, and there aren't any unsigned datatype. I bet that's your problem.
If you need larger values, use bigint. If bigint also isn't enough, use numeric, but use bigint rather than numeric unless you need the larger size or decimals, since it's much faster.
Upvotes: 2
Reputation: 12656
You are overflowing. Use a bigint if you need numbers that big.
See 8.1. Numeric Types.
Upvotes: 20
Reputation: 27252
Here's the magic incantation in your migration when you declare the column:
create_table :example do |t|
t.integer :field, :limit => 8
end
The :limit => 8 is the magic in this case as postgres only does signed 4-byte integers when you just say integer. This uses 8-byte signed integers.
Upvotes: 57
Reputation: 98508
Note the range of allowed values for the integer type in http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html. I think you are going to have to use a bigint, decimal, or double precision.
Upvotes: 1