Это продолжение вопроса, который я задавал ранее, в котором это сформулировано как скорее проблема программирования, чем проблема базы данных.
Ошибка Postgres с Sinatra / Haml / DataMapper на Heroku
Я считаю, что проблема была связана с хранением столбца идентификатора в базе данных Heroku Postgres после запуска db:push
.
Короче говоря, мое приложение правильно работает в моей исходной базе данных MySQL, но выдает ошибки Postgres на Heroku при выполнении любого запроса в столбце идентификатора, который, похоже, был сохранен в Postgres как TEXT, хотя он хранится как INT в MySQL. У меня вопрос: почему столбец ID создается как INT в Postgres при передаче данных в Heroku, и есть ли у меня способ предотвратить это.
Вот результат 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
Спасибо!
Post.all(:conditions => {:id => "1"})
), он не решает основную проблему создания столбца идентификатора как INTEGER. - person sevennineteen   schedule 31.05.2010