从Postgres迁移到SQL Server 2008

rea*_*ers 11 sql-server postgresql ssis data-migration

我需要将数据库从Postgres 7迁移到SQL Server 2008.我熟悉SSIS导入和导出向导,但我对如何定义数据源或定义数据提供程序感到困惑.

将Postgres迁移到SQL Server的最佳方法是什么,如何为postgres定义数据源/驱动程序?

Joh*_*hnB 10

祝你好运,试图从PostgreSQL的导入使用SQL Server导入和导出向导的SQL Server.然而,我看过无数的留言板线程与无法得到它的工作的人.例如:

这是我在这个主题上找到的最有用的主题:


帮助那些可能尝试实现类似我的目标的人.相反,选择在数据源中的"PostgreSQL的OLE DB提供程序"的下拉SQL Server导入和导出向导的菜单中选择".NET Framework数据提供程序的ODBC"

然后你必须创建一个DSN并提供一个ConnectionString.以下ConnectionString为我工作

驱动= {的PostgreSQL};服务器=本地主机;端口= 5432;数据库= TestMasterMap; UID = postgres的; PWD =;

要创建DSN,您必须进入管理工具→数据源(ODBC)并创建用户DSN.完成此操作后,您可以在SQL Server导入和导出向导的DSN文本框中提供DSN名称.


一位评论者声称它有效,但他在大桌子上出现"读取元组时内存不足"的错误.因此,对于行数超过300万的表,他必须将导入分为300万行.

此外,还有一个指向该线程中PostgreSQL的本机.NET提供程序链接.

就个人而言,如果这只是我必须做的一次,如果我理解了架构和数据,我会尝试:

  1. 将PostgreSQL中的数据导出为平面文件
  2. 在SQL Server中创建模式(没有PK或约束)
  3. 使用SSIS导入/导出向导导入平面文件
  4. 然后创建PK和必要的约束

可能需要花费更少的时间来完成上述工作,而不是乱用SSIS导入/导出向导和PostgreSQL几天(但如果这些工具有效,那将会很好!)


Gor*_*son 6

我在使用SQL Server 2008 R2中的导入向导从PostgreSQL导入表时遇到问题。我安装了PostgreSQL ODBC驱动程序,因此对于导入向导中的数据源,我选择了“ .db的.Net Framework数据提供程序”,并为我的PostgreSQL数据库提供了DSN名称。向导发现表没问题,但是当我执行导入时出现错误

无法检索源和目标数据的列信息。

“结算”-> [dbo]。[结算]:

–找不到列-1。

我在此处的Microsoft博客文章中找到了解决方案。显然问题是在报告列元数据时,各种ODBC驱动程序使用不同的属性名称。为了使导入工作正常,我必须编辑位于以下位置的“ ProviderDescriptors.xml”文件

C:\ Program Files \ Microsoft SQL Server \ 100 \ DTS \ ProviderDescriptors \ ProviderDescriptors.xml

在里面 ...

<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection">
Run Code Online (Sandbox Code Playgroud)

...元素我必须从...更改属性

<dtm:ColumnSchemaAttributes
    NameColumnName = "COLUMN_NAME"
    OrdinalPositionColumnName="ORDINAL_POSITION"
    DataTypeColumnName = "TYPE_NAME"
    MaximumLengthColumnName = "COLUMN_SIZE"
    NumericPrecisionColumnName = "COLUMN_SIZE"
    NumericScaleColumnName = "DECIMAL_DIGITS"
    NullableColumnName="NULLABLE"
    NumberOfColumnRestrictions="4"
/>
Run Code Online (Sandbox Code Playgroud)

... 至 ...

<dtm:ColumnSchemaAttributes
    NameColumnName = "COLUMN_NAME"
    OrdinalPositionColumnName="ORDINAL_POSITION"
    DataTypeColumnName = "TYPE_NAME"
    MaximumLengthColumnName = "LENGTH"
    NumericPrecisionColumnName = "PRECISION"
    NumericScaleColumnName = "SCALE"
    NullableColumnName="NULLABLE"
    NumberOfColumnRestrictions="4"
/>
Run Code Online (Sandbox Code Playgroud)

也就是说,我必须调整MaximumLengthColumnNameNumericPrecisionColumnName以及NumericScaleColumnName属性值"LENGTH""PRECISION""SCALE"分别。

做出更改后,从PostgreSQL到SQL Server的导入成功运行。

  • 更新:64 位也可以工作,但不要在同一目录中制作文件的“副本”。所有文件(即使未命名为 *.xml)都已加载并可覆盖您的更改。 (2认同)