如何将MySQL数据库转换为PostgreSQL?


20

是否有用于将MySQL数据库转换为PostgreSQL的命令行工具?我也想知道是否有一种使用普通mysqldump命令转换数据库的方法。



4
每当我看到这个,我都会哭泣的喜悦之泪。
rfusca 2012年


这很容易成为整个网站上最有用的问题之一。
埃文·卡罗尔

Answers:


13

你有没有尝试过:

mysqldump --compatible=postgresql dbname > export.sql

然后这样做逃避报价

sed "s/\\\'/\'\'/g" export.sql > export1.sql

可能需要更多按摩,因此请更仔细地查看mysqldump doco。


2
我已经尝试了您提供的方法,但是在postgresql中恢复
时却

2
@Mughil是什么错误?
Janus Troelsen

4
5年,还没有人固定mysqldumpsyntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman

1
根据dev.mysql.com/doc/refman/8.0/en/...唯一允许值--compatibleansi
phunehehe

7

这里有一些开源工具,这些工具可能非常有用:

FromMySqlToPostgreSql 是一个功能广泛的工具,非常易于使用。
它可以映射数据类型,完全像在MySQL数据库中一样迁移约束,索引,PK和FK。
它在后台使用PostgreSQL COPY,因此数据传输非常快。
用PHP(> = 5.4)编写的FromMySqlToPostgreSql。

pgloader   是使用COPY命令的PostgreSQL数据加载工具。相对于仅使用它的主要优势

COPY
要么
\copy
,并通过使用Foreign Data Wrapper进行交易,这是它的事务行为,其中pgloader将保留一个单独的拒绝数据文件,但会继续尝试在数据库中复制良好的数据。PostgreSQL的默认行为是事务性的,这意味着输入数据(文件或远程数据库)中的任何错误行都将停止表的整个批量加载。pgloader还实现了数据重新格式化,一个典型的例子是将MySQL datestamps 0000-00-00和0000-00-00 00:00:00转换为PostgreSQL。
NULL
值(因为我们的日历从未有零年)。
pgloader用LISP编写并作为源代码分发,因此您需要在使用之前进行编译。

希望对您有帮助...


1
pgloader甚至是postgre文档上推荐的迁移工具,所以我想这是最好的选择。我在具有50多个表的相当小的DB上成功使用了它,就像一个魅力。
卡帕杰

3

实际上,有一个免费的迁移工具易于使用,由EnterpriseDB自己开发。可以通过StackBuilder安装: 迁移工具包


3

我最近使用了DBConvert的一个非免费工具将访问数据库转换为postgres,发现与我浪费时间免费尝试可靠地花费的时间相比,这笔钱物有所值。我没有使用过用于MySQL <-> postgres的类似工具,但是除非您只对命令行工具感兴趣,否则可能值得考虑。

如果您想知道我与他们没有任何关系:-)


3

例如,您可以使用EnterpriseDB迁移向导。

它可以象征性地迁移OracleDB。但是对于Mysql,它有一些限制,例如,它不支持视图,触发器,存储过程。

有关更多信息,请参见EDB Migration Toolkit。不确定,但是可以迁移mysql-> oracle-> postgresql来保存您的存储过程(如果它们存在的话)。

Grep this:数据库和SQL迁移工具


1

这只是添加到现有答案中,这有助于我找到此解决方案。我使用FromMySqlToPostgreSql。您需要做的就是下载并提取FromMySqlToPostgreSql,复制示例配置文件,在其中设置数据库连接值,然后使用以下命令运行索引文件:

php index.php config.xml

简单而有效!


您能否通过此工具的链接来编辑帖子?
dezso

对不起,我忘记了。添加!
toing_toing 2015年

啊,这很有趣。您是否意识到该工具的作者也发布了答案?;)现在我做到了。
dezso

我受宠若惊!不过,他对自己的精彩插件并没有太多描述。
toing_toing 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.