2010-09-14 154 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

相關問題