Answers:
我最终没有使用任何第三方工具来处理数据,因为我没有尝试过使用大型表。甚至SSIS也失败了。不过,我确实使用了用于该模式的商业工具。所以我的转换过程如下:
转换步骤考虑了pg_dump和bcp使用的格式的一些差异,例如:
我还发现在MSSQL中违反了一些在Postgres中很好的独特约束,所以我不得不放弃它们。这是因为在MSSQL中NULL = NULL(即NULL被视为唯一值),但在Postgres中却没有。
如果您在SQL 2005框中安装了适当的Postgres支持驱动程序(或者希望通过ODBC使用Postgres,或者希望将数据从Postgres转储到文件中并从该文件导入),则可以在SQL Server中使用导入/导出向导为了复制数据。这将问您各种各样的问题,然后使用适当的批处理插入操作将导入作为SQL Server Integration Services(SSIS)包作业执行。
但是,如果没有该向导,则值得考虑的是,尽管您有大量的行,但平均每个行的大小小于135字节,并且有足够的事务日志空间来允许进行50 GB的事务'简单插入语句本身并不是不可能的。
将近10年了,这仍然不是一个直截了当的问题。我最终得到了一个混合解决方案,通过使用以下命令导出架构和表/列注释来滚动自己的架构映射器:
pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
然后,我编写了一个PHP脚本,将模式转换为T-SQL。随后,我使用下面的第三方软件进行行的实际导入(无从属关系):
http://www.convert-in.com/pgs2mss.htm
有点慢,但是到目前为止还不错。我们的数据库比您的数据库小,只有15GB,但是该工具似乎处理得很好。它也是我能找到的最便宜的一个,约50美元。到目前为止,这是值得的投资。