Heroku:从 MySQL 迁移数据库后 Postgres 类型运算符错误

2023-12-21

这是我之前提出的一个问题的后续问题,该问题更多地表述为编程问题而不是数据库问题。

Heroku 上的 Sinatra/Haml/DataMapper 出现 Postgres 错误 https://stackoverflow.com/questions/2935985/postgres-error-with-sinatra-haml-datamapper-on-heroku

我相信运行后问题已被隔离到 Heroku 的 Postgres 数据库中 ID 列的存储db:push.

简而言之,我的应用程序在原始 MySQL 数据库上运行正常,但在 ID 列上执行任何查询时,在 Heroku 上抛出 Postgres 错误,该 ID 列似乎已作为 TEXT 存储在 Postgres 中,尽管它在 MySQL 中存储为 INT。我的问题是,为什么在将数据传输到 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

Thanks!


我在 Heroku 提出了支持请求,他们的人员能够快速为我解决这个问题。在向他们发送我的 MySQL 表架构后,他们建议我删除UNSIGNED从我的 ID 列中:

您可以删除 UNSIGNED 位并查看是否有效吗?我认为续集不支持这一点。如果可行的话,我会为续集编写一个补丁。

一旦我这样做了,我就可以像使用之前一样迁移数据库db:push,并且该应用程序功能齐全。

Heroku 的平台和支持给我们留下了越来越深刻的印象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Heroku:从 MySQL 迁移数据库后 Postgres 类型运算符错误 的相关文章

随机推荐