Heroku: ошибка оператора типа Postgres после переноса БД из MySQL - PullRequest
2 голосов
/ 31 мая 2010

Это продолжение вопроса, который я задавал ранее, который назвал это скорее проблемой программирования, чем проблемой базы данных.

Ошибка Postgres с Sinatra / Haml / DataMapper на Heroku

Я считаю, что проблема была связана с хранением столбца ID в базе данных Heroku Postgres после выполнения db:push.

Короче говоря, мое приложение работает правильно на моей исходной базе данных MySQL, но выдает ошибки Postgres на Heroku при выполнении любого запроса к столбцу ID, который, похоже, хранится в 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

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 июня 2010

Я открыл запрос в службу поддержки Heroku, и их ребята смогли быстро решить эту проблему для меня. После отправки им моей схемы таблиц MySQL они предложили удалить UNSIGNED из столбцов идентификаторов:

Можете ли вы удалить бит UNSIGNED и посмотреть, работает ли он? Я не думаю, что продолжение поддерживает это. Если это сработает, я напишу патч для продолжения.

Как только я это сделал, я смог перенести базу данных так же, как и раньше, используя db:push, и приложение стало полностью функциональным.

Непрерывное впечатление на Heroku, как за платформу, так и за поддержку.

0 голосов
/ 31 мая 2010

Не могли бы вы вытащить его в локальную базу данных postgres. Нужно ли волшебство ALTER / COPY? ПЕРЕМЕЩАТЬ ТАБЛИЦУ и толкнуть его снова?

...