データベースを Postgres 7 から SQL Server 2008 に移行する必要があります。SSIS のインポートおよびエクスポート ウィザードには慣れていますが、データ ソースの定義方法またはデータ プロバイダーの定義方法に困惑しています。
Postgres を SQL Server に移行する最良の方法と、postgres のデータ ソース/ドライバーを定義する方法を教えてください。
データベースを Postgres 7 から SQL Server 2008 に移行する必要があります。SSIS のインポートおよびエクスポート ウィザードには慣れていますが、データ ソースの定義方法またはデータ プロバイダーの定義方法に困惑しています。
Postgres を SQL Server に移行する最良の方法と、postgres のデータ ソース/ドライバーを定義する方法を教えてください。
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
、およびに微調整する必要がありました。NumericPrecisionColumnName
NumericScaleColumnName
"LENGTH"
"PRECISION"
"SCALE"
その変更が行われると、PostgreSQL から SQL Server へのインポートが正常に実行されました。