2010-09-14 157 views
9

我需要将数据库从Postgres 7迁移到SQL Server 2008.我熟悉SSIS导入和导出向导,但我很难定义如何定义数据源或定义数据提供者。从Postgres迁移到SQL Server 2008

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

+0

您会从DataSources下拉列表中选择SQL Server Native Client。我猜Postgres需要odbc提供者,但是我不知道如何实现它 – reach4thelasers 2010-09-14 16:58:59

+0

你现在如何连接到Postgres?您还没有设置postgres的ODBC数据源?是的,你需要那个。 – JohnB 2010-09-14 17:01:57

+0

问题1:为什么有人想要这样做?这不仅是经济上的自杀,也是技术上的自杀。 – 2015-10-21 17:15:54

回答

9

我希望你在尝试使用SQL Server导入和导出向导从PostgreSQL导入到SQL Server中运气不错。但是,我已经阅读了大量的留言板主题,让人们无法正常工作。例如:

这里是我的话题中发现的最有用的线索:


帮助可能试图达到与我相似的目标的人。相反,选择在数据源中的“PostgreSQL的OLE DB提供程序”的下拉SQL Server导入和导出向导的菜单中,选择“为ODBC .NET Framework数据提供”

那么你必须做一个DSN,并提供一个ConnectionString。以下ConnectionString为我工作

Driver = {PostgreSQL}; Server = localhost; Port = 5432; Database = TestMasterMap; Uid = postgres; Pwd =;

要创建一个DSN,您必须进入AdministrativeToolsàData Sources(ODBC)并创建一个用户DSN。完成此操作后,您可以在SQL Server导入和导出向导的DSN文本框中提供DSN名称。


一位评论者声称,它的工作,但他得到了“内存不足而阅读的元组”上大表的错误。因此,对于拥有300多万行的表格,他不得不将进口分成300万行。

此外,该线程中有一个link to the native .NET provider for PostgreSQL

个人而言,如果这是什么,我只有做一次,如果我理解架构和数据还算不错,我会尝试:

  1. 出口数据从PostgreSQL的平面文件
  2. 建立在SQL Server的架构(没有的PK或约束)
  3. 使用SSIS导入/导出向导导入平面文件
  4. 然后创建的PK和必要的约束

这可能需要你更少的时间做比SSIS导入/导出向导和PostgreSQL搞乱了天以上(但如果这些工具的工作就好!)

+0

我只是试图将我的表格作为CSV文件导入到SQL Server 2005中,并注意到CSV导入是地狱般的。由于各种问题,我无法完成工作。 PostgreSQL像这样导入了相同的文件,没有任何问题。 – juzzlin 2014-03-20 17:13:25

+0

我喜欢将数据导出为CSV的想法。直接使用SSIS对我来说效果不佳,特别是因为我想导出的数据是以视图组织的,而odbc驱动程序(或SSIS本身)似乎没有选择。 – Andre 2016-09-20 20:59:30

1

当我完成了征求意见的上面的答案,我想到尝试SQL WorkbenchJ;它有一个数据泵功能,对我来说工作得很好。我设法将数据从我的PostgreSQL数据库导出到SQL服务器实例。

那些想要以批处理模式(通过shell)运行的,请按照以下步骤操作:Google Groups Thread。讨论中提到的WbCopy命令没有真正记录在任何可以找到的位置,但是可以通过数据泵接口生成一个命令,然后更改所需的任何内容。

1

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

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

“结算” - > [DBO] [计费]:

- 找不到列-1。

我在Microsoft博客文章here中找到了解决方案。显然问题是各种ODBC驱动程序在报告列元数据时使用不同的属性名称。为了让进口工作,我不得不编辑 “ProviderDescriptors.xml” 文件,该文件是位于

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

在该...

<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection"> 

...元素我不得不改变从属性...

<dtm:ColumnSchemaAttributes 
    NameColumnName = "COLUMN_NAME" 
    OrdinalPositionColumnName="ORDINAL_POSITION" 
    DataTypeColumnName = "TYPE_NAME" 
    MaximumLengthColumnName = "COLUMN_SIZE" 
    NumericPrecisionColumnName = "COLUMN_SIZE" 
    NumericScaleColumnName = "DECIMAL_DIGITS" 
    NullableColumnName="NULLABLE" 
    NumberOfColumnRestrictions="4" 
/> 

...到...

<dtm:ColumnSchemaAttributes 
    NameColumnName = "COLUMN_NAME" 
    OrdinalPositionColumnName="ORDINAL_POSITION" 
    DataTypeColumnName = "TYPE_NAME" 
    MaximumLengthColumnName = "LENGTH" 
    NumericPrecisionColumnName = "PRECISION" 
    NumericScaleColumnName = "SCALE" 
    NullableColumnName="NULLABLE" 
    NumberOfColumnRestrictions="4" 
/> 

即,我不得不分别来调整MaximumLengthColumnNameNumericPrecisionColumnNameNumericScaleColumnName属性值"LENGTH""PRECISION",和"SCALE",。

一旦进行了更改,PostgreSQL导入到SQL Server成功运行。

+0

感谢您的见解!我从来没有让它工作! – reach4thelasers 2016-11-19 13:30:53

相关问题