MySQL转储兼容不起作用

Pan*_*ack 0 mysql postgresql

难道我做错了什么?此命令不起作用.我正试图从MySQL迁移到PostgreSQL.

mysql> mysqldump --compatible=postgresql dbname > /tmp/table.sql;
Run Code Online (Sandbox Code Playgroud)

我一直在收到错误.

错误1064(42000):您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的'mysqldump --compatible = postgresql dbname </tmp/table.sql'附近使用正确的语法

我究竟做错了什么?有没有更简单的方法来转换数据库?我已经阅读了大量的迁移文章,但这似乎是开始转换的一种方式.

Cra*_*ger 9

唐对于眼前的问题非常正确.不过,还有更多的东西.

MySQL的mysqldump兼容模式不会生成可以直接加载到其他数据库中的DDL.没有通用和可移植的方式来表达AUTO_INCREMENT这样的事情,因此转储必须保持这样的MySQL特定功能或用没有自动增量行为的int类型替换它们.无论哪种方式,您都必须编辑转储以AUTO_INCREMENT使用SERIAL伪类型字段替换旧字段.

MySQL和PostgreSQL之间的类型名称也存在差异,您可能也需要对其进行更正.

我一般,我建议你从MySQL做两个转储.一个应该是仅模式转储,一个应该是仅数据转储,两者都是"兼容"格式.然后,您应该编辑模式转储以更正MySQL-isms并将它们转换为PostgreSQL-isms或(在可能的情况下)SQL标准用法.一旦你修复了架构并且使用psql thedatabasename < schema-edited-for-pg.sql你可以加载到PostgreSQL中就可以加载数据转储.

我还建议将数据转储包装在BEGIN;END;语句中,以便全部成功或全部失败.无论何时如果你通过转储部分地遇到错误并且必须编辑转储来修复它,这将为你省去不得不重复删除和重新创建数据库和模式的麻烦.