从PostgreSQL转储文件填充MySQL数据库

29

实际上,我需要从一个由PostgreSQL生成的SQL文件中填充MySQL数据库。

pg_dump dbname > myfile.sql

所以,如果我试着这样做

mysql> source myfile.sql

这显然行不通。虽然它填充了70%的表,但我想知道是否有一种方法可以实现?

从postgresql的源文件中,我可以将其作为数据源并填充到我的MySQL数据库中吗?


这取决于你使用的数据类型以及是否使用自定义函数和触发器。此外,您肯定需要移植使用这些表的代码,可能会有一些困难。请参阅http://dba.stackexchange.com/q/17132/2129。 - Bruno
@布鲁诺:我们的代码中没有任何数据库触发器或依赖关系。 - Nikhil Sharma
2个回答

31
如果你想要将 PostgreSQL 表中的数据和结构迁移到 MySQL 等价物,最简单的方法是使用数据库转换工具,比如:ESF 数据迁移工具 或开源对应的openDBCopy
如果你不想或者不能使用迁移工具,而你只需要迁移数据,另一个简单的方法是从 PostgreSQL 中以 CSV 格式导出数据,然后再将其导入到 MySQL 中。你可以使用以下命令来完成此操作: 在 PostgreSQL 上(导出):
COPY (SELECT query) TO '/path to csv file -*.csv'; 

在 MySQL 中(导入):

load data infile 'path to csv file-*.csv' into table tablename fields terminated by ',' lines terminated by '\n' . 

如果你仍想使用转储工具(pg_dump)进行操作,可以添加以下选项来生成一个MySQL更易理解的转储文件:

-d --data-only --no-owner --no-acl --attribute-inserts --disable-dollar-quoting --no-tablespaces

请记住,根据源数据库的结构,您可能需要操纵转储文件以使MysQL能够理解生成的转储文件...


我既没有MySql的架构,也没有数据,尽管我的数据库已经有了一些内容。 - Nikhil Sharma

2
迁移数据而不丢失数据的最佳方法是使用Mysql Workbench迁移。这个tutorial解释了如何进行迁移。以下是教程中未提及但我发现很重要的几点:
  • 安装最新的Postgres驱动程序以连接源Postgres数据库,如何安装此驱动程序可以在此tutoria中找到:
  • 这里下载并安装Postgres ODBC驱动程序
  • 安装完成后,您将在“打开ODBC管理员”中看到驱动程序 1. enter image description here 2.
  • 在设置源Postgres数据库时使用“PostgreSQL Unicode(x64)”作为驱动程序 enter image description here

注意:使用“PostgreSQL ANSI(x64)”作为驱动程序在迁移时会出现错误。可能是因为我的数据包含Unicode字符。


需要Oracle登录。 - Williams
链接的postgresql驱动程序损坏了。请使用chocolatey: choco install psqlodbc -y - stapmoshun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接