我需要将数据库从Postgres 7迁移到SQL Server 2008.我熟悉SSIS导入和导出向导,但我很难定义如何定义数据源或定义数据提供者。从Postgres迁移到SQL Server 2008
什么是将Postgres迁移到SQL Server的最佳方式,以及如何为postgres定义数据源/驱动程序?
我需要将数据库从Postgres 7迁移到SQL Server 2008.我熟悉SSIS导入和导出向导,但我很难定义如何定义数据源或定义数据提供者。从Postgres迁移到SQL Server 2008
什么是将Postgres迁移到SQL Server的最佳方式,以及如何为postgres定义数据源/驱动程序?
我希望你在尝试使用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。
个人而言,如果这是什么,我只有做一次,如果我理解架构和数据还算不错,我会尝试:
这可能需要你更少的时间做比SSIS导入/导出向导和PostgreSQL搞乱了天以上(但如果这些工具的工作就好!)
当我完成了征求意见的上面的答案,我想到尝试SQL WorkbenchJ;它有一个数据泵功能,对我来说工作得很好。我设法将数据从我的PostgreSQL数据库导出到SQL服务器实例。
那些想要以批处理模式(通过shell)运行的,请按照以下步骤操作:Google Groups Thread。讨论中提到的WbCopy命令没有真正记录在任何可以找到的位置,但是可以通过数据泵接口生成一个命令,然后更改所需的任何内容。
我在使用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"
/>
即,我不得不分别来调整MaximumLengthColumnName
,NumericPrecisionColumnName
和NumericScaleColumnName
属性值"LENGTH"
,"PRECISION"
,和"SCALE"
,。
一旦进行了更改,PostgreSQL导入到SQL Server成功运行。
感谢您的见解!我从来没有让它工作! – reach4thelasers 2016-11-19 13:30:53
您会从DataSources下拉列表中选择SQL Server Native Client。我猜Postgres需要odbc提供者,但是我不知道如何实现它 – reach4thelasers 2010-09-14 16:58:59
你现在如何连接到Postgres?您还没有设置postgres的ODBC数据源?是的,你需要那个。 – JohnB 2010-09-14 17:01:57
问题1:为什么有人想要这样做?这不仅是经济上的自杀,也是技术上的自杀。 – 2015-10-21 17:15:54