Странная ошибка точности битов Heroku (ruby on rails) - PullRequest
1 голос
/ 26 января 2012

Первоначально для координатного поля в моей модели использовалось целое число, но когда я попытался развернуть его в Heroku, мне напомнили (в результате сбоя), что мне нужно, чтобы оно было плавающим (поскольку в моей координате были десятичные точки),Поэтому я сгенерировал миграцию change_column на своем локальном компьютере, чтобы вместо них change_column они были плавающими.и все прошло нормально.

Я попытался снова развернуть на heroku, сначала с heroku pg:reset, а затем с heroku db:setup.Во время установки db: я получаю следующую ошибку:

PGError: ERROR: precision for type float must be less than 54 bits : CREATE TABLE "landmarks" ("id" serial primary key, "name" character varying(255), "xcoord" float(255), "ycoord" float(255), "created_at" timestamp, "updated_at" timestamp)

Таким образом, я сгенерировал еще одну миграцию change_column, на этот раз также с опцией: precision (установите на :precision => 50, чтоменьше 54).Я снова прошел весь процесс развертывания, и он выдал мне ту же ошибку.

Я что-то не так делаю?Я развернул другое приложение в Heroku, прежде чем оно использовало float без каких-либо изменений ...

Я использую SQLite на своей локальной машине, и я думаю, что Heroku использует Postgres?

Заранее спасибо!

[РЕДАКТИРОВАТЬ: я должен также упомянуть, что в выходном SQL ошибка, отображаемая после того, как я изменил значение :precision для моих координат, все еще говорит 'float (255)' ... не знаю почему]

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Не используйте float (255) в качестве типа столбца.Используйте либо real, либо double precision.Пожалуйста, прочитайте http://www.postgresql.org/docs/8.3/static/datatype-numeric.html#DATATYPE-FLOAT

Также мы настоятельно рекомендуем использовать postgres локально для разработки.Слишком часто можно столкнуться с несоответствиями, такими как это, когда радикально переключаются важные части вашего стека между разработкой и производством.И ваша база данных является важной частью вашего стека.

1 голос
/ 26 января 2012

Я думаю, что Postgres жалуется на разницу между битами и цифрами - то, что имеет точность в 50 цифр, имеет гораздо больше, чем 50 бит.Другими словами, 2 ^ 53 = 9,007,199,254,740,992 или 16 значащих цифр точности.Попробуйте установить его на :scale => 12, :precision => 15 - это даст вам три цифры до десятичной точки и 12 цифр после, и я считаю , что ставит вас под 53-битный предел.

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