MySQL转储兼容不起作用

时间:2011-11-28 20:29:42

标签: mysql postgresql

我做错了吗?此命令不起作用。我正试图从MySQL迁移到PostgreSQL。

mysql> mysqldump --compatible=postgresql dbname > /tmp/table.sql;

我一直收到错误。

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

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

3 个答案:

答案 0 :(得分: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;语句中包装数据转储,以使其全部成功或全部失败。如果你在转储中遇到错误并且必须编辑转储来修复它,这将为你省去不得不反复删除和重新创建数据库和模式的麻烦。

答案 1 :(得分:3)

mysqldump是一个从os命令行而不是mysql命令行运行的程序。退出mysql并在那里执行它应该没问题。

答案 2 :(得分:1)

我通常会使用openDbCopyESF Data Migration Toolkit之类的迁移工具来实现这些目的......