有一个快速的方法从MySQL导出大表到PostgreSQL吗?

我有一个大约270万个logging,63个字段和几个索引的表格。 我需要能够从MySQL快速获取这个表格postgresql(一个小时内)。 我知道mysql可以快速导出数据,但是postgresql在导入数据时似乎很慢。 有任何想法吗? 我现在已经导入了一个由mysqldump生成的CSV大约3个小时。

我能想到的最快的方法是在postgresql的表中删除所有的索引和触发器(或至lessALTER TABLE foo DISABLE TRIGGER ALL; ),添加\. input结束行到CSV文件的末尾,然后把文件放在服务器上(最好是用于数据库的驱动器以外的驱动器上,或者可能是服务器可以通过NFS访问的networking上); COPY foo FROM '/some/file.csv' WITH CSV; (8.x语法,在9.0中支持。根据CSV文件格式,您可能需要进行修改 。)之后,重新创build索引并重新启用触发器。

postgres的一些configuration选项会影响数据加载时间。 禁用自动清理和增加检查点之间的时间可以帮助处理巨大的负载,但是您需要重新启动postgresql才能更改checkpoint_segmentsautovacuum设置,并且您需要在完成后重新设置autovacuum。

mysqldump --compatible=postgresql -h... -u... -p... dbname tablename > PostgresqlData.sql

这个选项存在

 --compatible=name Change the dump to be compatible with a given mode. By default tables are dumped in a format optimized for MySQL. Legal modes are: ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options, no_field_options. One can use several modes separated by commas. Note: Requires MySQL server version 4.1.0 or higher. This option is ignored with earlier server versions. 

试一试 !!!

有许多专业的ETL工具可以以相当高的速度在数据库之间迁移 – 例如,我使用了Pentaho的开源PDI(nee Kettle),命中率为100K行/秒。 这些还带来了其他一些优点,例如允许您将数据按摩到几个新的结构,映射过程的graphics界面等等。