【问题标题】:Relation error when pushing mysql to heroku将mysql推送到heroku时出现关系错误
【发布时间】:2012-09-13 03:14:11
【问题描述】:

我正在尝试使用 valkyrie 将我的本地 mysql 数据库推送到我的 heroku postgres 数据库:

valkyrie mysql://localhost/themedb postgres://DATABASE__COLOR_URL/here

它似乎开始运行良好,但遇到了一个我无法弄清楚的约束错误:

Transferring 17 tables:
auth_group:     100% |=========================================| Time: 00:00:02
auth_group_per: 100% |=========================================| Time: 00:00:00
auth_message:   100% |=========================================| Time: 00:00:00
auth_permissio: 100% |=========================================| Time: 00:00:02
auth_user:      100% |=========================================| Time: 00:00:00
auth_user_grou: 100% |=========================================| Time: 00:00:00
C:/Program Files (x86)/ruby-1.9.3/lib/ruby/gems/1.9.1/gems/sequel-3.31.0/lib/sequel/adapters/postgre
s.rb:181:in `async_exec': PG::Error: ERROR:  relation "user_id" already exists(Sequel::DatabaseError)

我认为这些模型来自django.contrib.auth,我不明白为什么会出现关系错误。有什么想法吗?

【问题讨论】:

  • 你能弄明白吗?我有同样的问题。谢谢。

标签: mysql django ruby heroku sequel


【解决方案1】:

该问题已在 valkyrie 中得到解决。 以下是valkyrie source对该问题的解释:

mysql 索引命名空间是每个表的,而不是每个数据库的,所以它是可能的 在从 mysql 到 postgresql 的迁移中,会有索引名称冲突。

解决方法也很详细:

此代码检查它是否从 mysql 数据库 到 postgresql, 如果是这样,请确保尝试创建第二个同名 idx 不会导致迁移失败,而只是将索引重命名为 prepend 表名

请注意,gem install valkyrie 不会安装“固定”版本。你必须从 github 获取最新的代码,这很好用。

【讨论】:

    【解决方案2】:

    您确定您的目标数据库是空的吗?该错误明确告诉您,在您尝试创建 user_id 字段时它已经存在。

    【讨论】:

    • 我猜应该是的,我是在转移之前创建的。
    • 您是否偶然在新数据库上运行了syncdb?
    • 不,我没有。我也刚刚尝试使用 heroku pg:reset 重置它,但是当我尝试转移时仍然会发生错误。
    【解决方案3】:

    您在 MySQL 中的源数据是否干净?是否在您的 MySQL 数据库中检查了约束,您是否使用 InnoDB?

    看起来您的开发数据库中可能存在重复条目。

    【讨论】:

    • 干净是什么意思,如何检查是否干净?无论如何,导致错误的表是空的。
    • 导致错误的表是什么 - 您可以将其添加到问题中吗?干净,我的意思是不应该有重复,并且存在 FK 关系等(如果 MySQL 正在执行这些约束,那应该足够好了)。
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 2017-03-12
    • 2019-06-01
    相关资源
    最近更新 更多