Целое число вне диапазона на БД Postgres - PullRequest
28 голосов
/ 16 июня 2009

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

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

Ответы [ 5 ]

56 голосов
/ 17 сентября 2010

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

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

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

19 голосов
/ 16 июня 2009

В чем вопрос? Вы переполнены. Используйте bigint, если вам нужны такие большие цифры.

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

12 голосов
/ 20 ноября 2013

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

t.column :foobar, :bigint

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

1 голос
/ 16 июня 2009

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

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

1 голос
/ 16 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...