我正在尝试使用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
,我不明白为什么会出现关系错误。有什么想法吗?
答案 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获得最新的代码才能生效。