Подтвердить что ты не робот

Целочисленность вне диапазона по базе данных Postgres

Простое приложение rails с использованием Postgres DB, получив ошибку "целое вне диапазона" при попытке вставить 2176968859. Должно быть легкое исправление миграции, но я не уверен. Прямо сейчас у меня есть...

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

Ответ 2

Здесь магическое заклинание в вашей миграции, когда вы объявляете столбец:

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

The limit = > 8 является магией в этом случае, поскольку postgres только подписывает 4-байтовые целые числа, когда вы просто говорите целое число. Это использует 8-байтовые целые числа.

Ответ 3

В Rails 4. В файле миграции вы можете определить столбец как:

t.column :foobar, :bigint

Как отмечалось в предыдущих ответах, limit: 8 также достигнет того же самого

Ответ 4

Обратите внимание на диапазон допустимых значений для целочисленного типа в http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html. Я думаю, вам придется использовать bigint, десятичную или двойную точность.

Ответ 5

Целые числа PostgreSQL подписаны, нет неподписанного типа данных - я уверен, что ваша проблема.

Если вам нужны большие значения, используйте bigint. Если bigint также недостаточно, используйте числовое значение - но используйте bigint, а не числовое, если вам не нужен больший размер или десятичный знак, поскольку он намного быстрее.