我做错了吗?此命令不起作用。我正试图从MySQL迁移到PostgreSQL。
mysql> mysqldump --compatible=postgresql dbname > /tmp/table.sql;
我一直收到错误。
错误1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'mysqldump --compatible = postgresql dbname<附近使用正确的语法。第1行的/tmp/table.sql'
我做错了什么?有没有更简单的方法来转换数据库?我已经阅读了大量的迁移文章,但这似乎是开始转换的一种方式。
答案 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)
我通常会使用openDbCopy或ESF Data Migration Toolkit之类的迁移工具来实现这些目的......