1

元々、私のモデルの座標フィールドは整数を使用していましたが、Heroku にデプロイしようとしたとき、(座標に小数点があったため) 代わりに浮動小数点数にする必要があることを (クラッシュによって) 思い出しました。そこで、ローカル マシンで change_column 移行を生成し、change_column をフロートに変更しました。そしてすべてがうまくいきました。

heroku pg:reset最初に a を使用して、次に を使用して、heroku に再度デプロイしようとしました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 => 5054 未満の に設定)。展開プロセス全体をもう一度やり直しましたが、同じエラーが発生しました。

私は何か間違ったことをしていますか?float を変更せずに使用する前に、別のアプリを Heroku にデプロイしました...

ローカル マシンで SQLite を使用していますが、Heroku は Postgres を使用していると思いますか?

前もって感謝します!

[編集: 座標の値を変更した後に表示される出力 SQL のエラーは:precision、まだ 'float(255)' と表示されていることにも言及する必要があります...理由はわかりません]

4

2 に答える 2

3

列の型として float(255) を使用しないでください。またはのいずれrealかを使用しますdouble precision。http://www.postgresql.org/docs/8.3/static/datatype-numeric.html#DATATYPE-FLOATをお読みください

また、開発にはローカルで postgres を使用することを強くお勧めします。開発と本番の間でスタックの重要な部分を大幅に切り替えるときに、このような不整合が発生することはよくあることです。そして、データベースはスタックの重要な部分です。

于 2012-01-26T23:19:34.060 に答える
1

Postgres はビットと桁の違いについて不満を言っていると思います。50 桁の精度を持つものは 50 ビットをはるかに超えています。別の言い方をすれば、2^53 = 9,007,199,254,740,992、つまり有効桁数 16 桁の精度です。- に設定してみてください。これにより:scale => 12, :precision => 15、小数点の前に 3 桁、小数点の後に 12 桁が表示されます。これにより、53 ビットの制限を下回っていると思います。

于 2012-01-26T05:58:37.680 に答える