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

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

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

答案1

我最终没有使用任何第三方工具来处理数据,因为我尝试过的所有工具都无法处理大型表。甚至 SSIS 也失败了。不过,我确实使用了一个商业工具来处理架构。所以我的转换过程如下:

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

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

  • pg_dump 将一些 Postgres 特定的内容放在文件开头,并以“。”结束数据,而 bcp 则期望整个文件包含数据
  • pg_dump 将 NULL 值存储为“\N”,而 bcp 不需要用任何内容代替 NULL(即,列分隔符之间没有数据)
  • pg_dump 将制表符编码为“\t”,将换行符编码为“\n”,而 bcp 则按字面意思处理它们
  • pg_dump 始终使用制表符和换行符作为分隔符,而 bcp 允许用户指定分隔符。如果数据包含任何制表符或换行符,则这很有必要,因为它们未经编码。

我还发现,一些在 Postgres 中没有问题的唯一约束在 MSSQL 中被违反了,所以我不得不删除它们。这是因为在 MSSQL 中 NULL=NULL(即 NULL 被视为唯一值),但在 Postgres 中不是这样。

答案2

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

但是如果该向导不是一个选项,那么值得考虑的是,尽管您有大量的行,但每个行的单独大小平均小于 135 字节,并且有足够的事务日志空间来允许 50 GB 的事务发生“简单插入”语句本身并不是不可能。

答案3

http://www.easyfrom.net/

就是这样 :) 不幸的是,它有点贵。

答案4

近 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 美元。到目前为止,这是一项值得的投资。

相关内容