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

Mug*_*hil 22 mysql postgresql mysqldump

是否有任何命令行工具可以将 MySQL 数据库转换为 PostgreSQL?我还想知道是否有办法使用普通mysqldump命令转换数据库。

Nic*_*ias 16

你有没有尝试过:

mysqldump --compatible=postgresql dbname > export.sql
Run Code Online (Sandbox Code Playgroud)

然后这样做以逃避引号

sed "s/\\\'/\'\'/g" export.sql > export1.sql
Run Code Online (Sandbox Code Playgroud)

可能需要更多的按摩,所以更仔细地查看 mysqldump doco。

  • 5 年了,还没有人修复“mysqldump”。`在“(”第 2 行:“id” int(10) NOT NULL 处或附近出现语法错误,` (4认同)
  • 根据 https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_complete ,“--兼容”的唯一允许值是“ansi” (3认同)
  • 我已经尝试过您提供的方法,但是在 postgresql 中恢复时出现错误 (2认同)
  • @Mughil 错误是什么? (2认同)

小智 8

以下是一些非常有用的开源工具:

FromMySqlToPostgreSql 是一个功能覆盖工具,非常易于使用。
它映射数据类型、迁移约束、索引、PK 和 FK,就像它们在您的 MySQL 数据库中一样。
在幕后,它使用 PostgreSQL COPY,因此数据传输非常快。
FromMySqlToPostgreSql 用 PHP (>= 5.4) 编写。

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

COPY
Run Code Online (Sandbox Code Playgroud) 或者
\copy
Run Code Online (Sandbox Code Playgroud),以及使用外部数据包装器,是它的事务行为,其中 pgloader 将保留一个单独的被拒绝数据文件,但继续尝试在您的数据库中复制好的数据。默认的 PostgreSQL 行为是事务性的,这意味着输入数据(文件或远程数据库)中的任何错误行都将停止表的整个批量加载。pgloader 也实现了数据重新格式化,一个典型的例子是将 MySQL 日期戳 0000-00-00 和 0000-00-00 00:00:00 转换为 PostgreSQL
NULL
Run Code Online (Sandbox Code Playgroud)值(因为我们的日历从未有过零年)。
pgloader 用 LISP 编写并作为源代码分发,因此您需要在使用前对其进行编译。

希望它会帮助你...