2

これは、これをデータベースの問題というよりもプログラミングの問題として表現した以前の質問へのフォローアップです。

Heroku の Sinatra/Haml/DataMapper での Postgres エラー

問題は、実行後の Heroku の Postgres データベースの ID 列のストレージに切り分けられたと思いますdb:push

要するに、私のアプリは元の MySQL データベースでは適切に実行されますが、MySQL では INT として格納されているにもかかわらず、Postgres に TEXT として格納されているように見える ID 列でクエリを実行すると、Heroku で Postgres エラーがスローされます。私の質問は、Heroku へのデータ転送時に Postgres で ID 列が INT として作成されている理由と、これを防ぐ方法があるかどうかです。

heroku console問題を示すセッションからの出力は次のとおりです。

Ruby console for myapp.heroku.com
>> Post.first.title
=> "Welcome to First!"
>> Post.first.title.class
=> String
>> Post.first.id
=> 1
>> Post.first.id.class
=> Fixnum
>> Post[1]
PostgresError: ERROR:  operator does not exist: text = integer
LINE 1: ...", "title", "created_at" FROM "posts" WHERE ("id" = 1) ORDER...
                                                         ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
Query: SELECT "id", "name", "email", "url", "title", "created_at" FROM "posts" WHERE ("id" = 1) ORDER BY "id" LIMIT 1

ありがとう!

4

2 に答える 2

1

Heroku でサポート リクエストを開いたところ、Heroku の担当者が迅速に解決してくれました。MySQL テーブル スキーマを送信した後UNSIGNED、ID 列から削除するよう提案されました。

UNSIGNED ビットを削除して、それが機能するかどうかを確認できますか? 続編がそれをサポートしているとは思わない。それがうまくいけば、続編へのパッチを書きます。

これを行うと、使用前と同じ方法でデータベースを移行できdb:push、アプリは完全に機能しました。

プラットフォームとサポートの両方で、Heroku に継続的に感銘を受けています。

于 2010-06-01T23:47:03.270 に答える
0

ローカルの postgres データベースにプルできませんか。必要な ALTER/COPY?MOVE TABLE マジックを実行して、もう一度押し戻しますか?

于 2010-05-31T13:21:12.747 に答える