13

データベースを Postgres 7 から SQL Server 2008 に移行する必要があります。SSIS のインポートおよびエクスポート ウィザードには慣れていますが、データ ソースの定義方法またはデータ プロバイダーの定義方法に困惑しています。

Postgres を SQL Server に移行する最良の方法と、postgres のデータ ソース/ドライバーを定義する方法を教えてください。

4

4 に答える 4

13

SQL Server 2008 R2 のインポート ウィザードを使用して PostgreSQL からテーブルをインポートする際に問題が発生しました。PostgreSQL ODBC ドライバーがインストールされているので、インポート ウィザードのデータ ソースとして [.Net Framework Data Provider for Odbc] を選択し、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">

... 属性を変更する必要があった要素 ...

<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、およびに微調整する必要がありました。NumericPrecisionColumnNameNumericScaleColumnName"LENGTH""PRECISION""SCALE"

その変更が行われると、PostgreSQL から SQL Server へのインポートが正常に実行されました。

于 2016-11-18T00:16:44.207 に答える
11
于 2010-09-14T16:53:04.787 に答える