将mysql推送到heroku时的关系错误

时间:2012-09-13 03:14:11

标签: mysql django heroku sequel

我正在尝试使用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,我不明白为什么会出现关系错误。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

这个问题已在valkyrie中修复。 以下是valkyrie source

对此问题的解释
  

mysql索引名称空间是每个表,vs每个数据库,所以它是可能的   有一个,在mysql中postgresql迁移,索引名称冲突。

解决方案也很详细:

  

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

请注意,gem install valkyrie不会安装“固定”版本。你必须从github获得最新的代码才能生效。