我在 PostgreSQL 8.3.1 中有一个数据库,我想迁移到 MS SQL Server 2005(或者可能是 2008),包括表模式和数据。该数据库大小约为 50GB,大约有 400,000,000 行,所以我认为简单的 INSERT 语句是不可能的。谁能推荐执行此迁移的最佳工具?显然它需要可靠,因此目标数据库中的数据与源数据库中的数据完全相同,并且它需要能够在合理的时间内复制该数据量。
我在 PostgreSQL 8.3.1 中有一个数据库,我想迁移到 MS SQL Server 2005(或者可能是 2008),包括表模式和数据。该数据库大小约为 50GB,大约有 400,000,000 行,所以我认为简单的 INSERT 语句是不可能的。谁能推荐执行此迁移的最佳工具?显然它需要可靠,因此目标数据库中的数据与源数据库中的数据完全相同,并且它需要能够在合理的时间内复制该数据量。
如果您在 SQL 2005 机器上安装了适当的 Postgres 支持驱动程序(或希望通过 ODBC 使用 Postgres,或希望将 Postgres 中的数据转储到文件并从中导入),您可以使用 SQL Server 中的导入/导出向导命令复制数据。这将询问您各种问题,然后使用适当的批量插入操作将导入作为 SQL Server Integration Services (SSIS) 包作业执行。
但是,如果该向导不是一个选项,那么值得考虑的是,尽管您有大量行,但行的单个大小平均 < 135 字节,并且有足够的事务日志空间来允许发生 50 GB 事务'简单的 insert' 语句本身并不是不可能的。
我最终没有使用任何第三方工具来处理数据,因为我尝试过的工具都没有为大表工作。甚至 SSIS 也失败了。不过,我确实为架构使用了商业工具。所以我的转换过程如下:
转换步骤处理了 pg_dump 和 bcp 使用的格式的一些差异,例如:
我还发现一些在 Postgres 中很好的独特约束在 MSSQL 中被违反了,所以我不得不放弃它们。这是因为在 MSSQL 中 NULL=NULL(即 NULL 被视为唯一值),但在 Postgres 中则不然。
http://www.easyfrom.net/
你去 :) 不幸的是,它有点贵。
将近 10 年过去了,这仍然不是一个直截了当的问题。我最终得到了一个混合解决方案,我通过使用以下命令导出模式和表/列注释来推出自己的模式映射器:
然后,我编写了一个 PHP 脚本,将架构转换为 T-SQL。随后,我使用以下第 3 方软件进行行的实际导入(无从属关系):
http://www.convert-in.com/pgs2mss.htm
它有点慢,但到目前为止一切都很好。我们的数据库比你的小,只有 15GB,但那个工具似乎处理得很好。它也是我能找到的最便宜的,大约 50 美元。到目前为止,这是一项值得的投资。