将数据从MS SQL迁移到PostgreSQL?

Fre*_*red 18 sql-server migration postgresql

我环顾四周,似乎无法找到解决这个具体问题的任何东西.

将数据从MS SQL Server 2005数据库移动到Postgres安装(8.x)的最简单方法是什么?

我已经研究了几个实用程序,如"完全转换企业"等,它们都因为某种原因而失败,其中包括奇怪的错误,这些错误使得它更容易插入空值而不是实际数据(wth?).

我正在查看包含所有表的数据库,除了单个视图,没有存储过程,函数等.

在这一点上,我即将写一个小工具来为我做,我只是不相信这是必要的.当然有某种东西可以做到这一点?我甚至不太担心成本,虽然免费是可取的:)

Ehs*_*edi 14

我不知道为什么没有人提到使用健壮的MS SQL Server Management Studio的最简单和最简单的方法.

您只需使用内置的SSIS导入/导出功能即可.您可以按照以下步骤操作:

  1. 首先,您需要安装适用于Windows 的PostgreSQL ODBC驱动程序.根据CPU arch(x86/x64)安装正确的版本非常重要.

  2. 在Management Studio中,右键单击您的数据库:Tasks - > Export Data

  3. 选择SQL Server Native Client作为数据源.

  4. 选择.Net Framework Data Provider for ODBC作为目标驱动程序.

  5. 使用以下格式将连接字符串设置为数据库:

    Driver = {PostgreSQL ODBC Driver(UNICODE)}; Server =; Port =; Database =; UID =; PWD =

  6. 在下一页中,您只需选择要导出的表.SQL Server将生成默认映射,您可以自由编辑它.可能你会遇到一些需要一些时间来解决的类型不匹配问题.例如,如果SQL Server中有布尔列,则应将其导出为int4.

Microsoft Docs提供了通过ODBC连接到PostgreSQL的详细说明.

PS:如果要查看已安装的ODBC驱动程序,则需要通过ODBC数据源管理器进行检查.

  • 是的,根据步骤 1,选择的驱动程序架构(32 位与 64 位)很重要。不知何故,我需要 32 位 ODBC 驱动程序从 64 位 SQL Server Management Studio 导出数据。我认为它正在运行一个仍然是 32 位的外部导出器工具。 (3认同)
  • 这是我的工作配置的[屏幕截图](https://i.stack.imgur.com/M3J2s.png),供感兴趣的人使用。安装 32 位和 64 位版本的 ODBC 驱动程序似乎对我有帮助。 (3认同)
  • 谢谢,这比我尝试过的任何其他工具/方法都要好。我不得不更改司机的名字。 (2认同)
  • 这很有帮助。对我来说,有几个问题可能对未来的查看者有所帮助:1) 您需要为 Postgres 驱动程序添加数据源名称 2) 确保您的数据源名称与 Drive={your-data 设置的值相匹配-来源名称} (2认同)
  • 现代驱动程序已更名为“PostgreSQL Unicode”。 (2认同)

Mil*_*dev 8

看一下软件目录.在Administration/development tools下,我看到DBConvert for MS SQL和PostgreSQL.可能还列出了其他类似的工具.

  • 完美,这正是我要找的。我试驾了它,很喜欢它,所以我购买了完整版,它运行起来像个冠军。对于那些不寻找这个特定解决方案,而是寻找类似解决方案的人,他们提供了在 MSSQL、Postgres、Oracle、MS Access、Firebird 等之间转换和同步的工具。我只能说 MSSQL/Postgres 转换,但如果那些转换是任何迹象,这个软件包非常值得 79 美元。 (2认同)

Mag*_*der 5

您可以使用MS DTS功能(我认为在最新版本中重命名为SSIS)。DTS 的一个问题是,在将数据加载到 pg 中时,我无法使其在每一行之后进行提交。如果您只有几行 100k 行左右,那还可以,但速度确实非常慢。

我通常最终会编写一个小脚本,以 CSV 格式从 SQLServer 转储数据,然后在 PostgreSQL 端使用 COPY WITH CSV。

不过,这两者都只处理数据。处理模式有点困难,因为数据类型不一定直接映射。但它可以轻松地与模式的静态加载一起编写脚本。如果模式很简单(例如只是 varchar/int 数据类型),则该部分也可以轻松地根据 INFORMATION_SCHEMA 中的数据编写脚本。