奇怪的Heroku浮点精度错误(轨道上的ruby)

最初我模型上的一个坐标字段是使用整数,但当我尝试部署到Heroku时,我被提醒(通过崩溃)我需要它成为一个浮点(因为我的坐标中有小数点)。 所以我在我的本地机器上生成了change_column迁移,将change_column转换为浮动代替。 一切都很顺利。

我尝试再次部署到heroku,首先使用heroku pg:reset然后使用heroku db:setup 。 在db:setup期间,我收到以下错误:

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我的coords的:precision值仍然说’浮动(255)’…不知道为什么]

不要使用float(255)作为列类型。 使用realdouble precision 。 请阅读http://www.postgresql.org/docs/8.3/static/datatype-numeric.html#DATATYPE-FLOAT

我们也强烈建议在本地使用postgres进行开发。 在开发和生产之间彻底切换堆栈的重要部分时,遇到不一致(例如这种情况)是很常见的。 您的数据库是堆栈的重要组成部分。

我认为Postgres抱怨位和数字之间的区别 – 具有50位精度的东西远远超过50位。 换句话说,2 ^ 53 = 9,007,199,254,740,992,或16位有效数字的准确性。 尝试将其设置为:scale => 12, :precision => 15 – 小数点之前应该是三位数,之后是12位数,我相信这会让你低于53位的限制。