将PostgreSQL数据库迁移到MS SQL 2005的最佳工具?

我在PostgreSQL 8.3.1中有一个数据库,我想迁移到MS SQL Server 2005(或者2008),包括表模式和数据。 数据库大小约为50GB,大约有4亿行,所以我认为简单的INSERT语句是不可能的。 任何人都可以推荐执行此迁移的最佳工具吗? 显然它需要可靠,所以目标数据库中的数据与源数据完全一样,并且需要能够在合理的时间内复制这些数据量。

如果您在SQL 2005框中安装了适当的Postgres支持驱动程序(或希望通过ODBC使用Postgres,或希望将Postgres中的数据转储到文件并从中导入),则可以使用SQL Server中的导入/导出向导为了复制数据。 这将询问您各种问题,然后使用适当的批插入操作作为SQL Server Integration Services(SSIS)包作业执行导入。

但是,如果该向导不是一个选项,则值得考虑的是,虽然行数很多,但行的个别大小平均小于135个字节,并且提供足够的事务日志空间以允许发生50 GB的事务“简单的插入“语句本身不是不可能的。

我结束了没有使用任何第三方工具的数据,因为我没有尝试过的大表工作。 即使SSIS失败。 不过,我确实使用了商业工具。 所以我的转换过程如下:

  1. 完全转换企业复制模式(无数据)。
  2. pg_dump以“纯文本”格式从Postgres导出数据,这基本上是一个制表符分隔值(TSV)文件。
  3. Python脚本将导出的文件转换为bcp格式会理解。
  4. bcp将数据导入MSSQL。

转换步骤处理了pg_dump和bcp使用的格式的一些差异,例如:

  • pg_dump在文件开始处放置了一些Postgres特定的东西,并以“。”结束数据,而bcp期望整个文件包含数据
  • pg_dump将NULL值存储为“\ N”,而bcp不需要任何NULL来代替NULL(即在列分隔符之间没有数据)
  • pg_dump将制表符编码为“\ t”,换行符编码为“\ n”,而bcp将string处理
  • pg_dump总是使用制表符和换行符作为分隔符,而bcp允许用户指定分隔符。 如果数据包含任何制表符或换行符,这将变得必要,因为它们没有编码。

我还发现在MSSQL中违反了Postgres中的一些独特的约束条件,所以我不得不放弃它们。 这是因为MSSQL中的NULL = NULL(即,NULL被视为唯一值),但不在Postgres中。

http://www.easyfrom.net/

你去:)不幸的是,这是一个有点贵。