9


3

PostgresからSQL Server 2008への移行

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

PostgresをSQL Serverに移行する最良の方法は何ですか?また、postgresのデータソース/ドライバーを定義するにはどうすればよいですか?

3 Answer


10


SQL Serverのインポートおよびエクスポートウィザードを使用して、PostgreSQLからSQL Serverにインポートしようとして幸運を祈ります。 しかし、私は多くのメッセージボードスレッドを読んで、人々がそれを機能させるのに苦労しています。 例えば:

トピックで見つけた最も役立つスレッドは次のとおりです:

'' '' '

_私と同じ目標を達成しようとしている人を助けるため。 SQL Serverインポートおよびエクスポートウィザードのデータソースドロップダウンメニューで[PostgreSQL OLE DBプロバイダー]を選択する代わりに、[。Net Framework Data Provider for Odbc] _を選択します。

_次に、DSNを作成し、ConnectionStringを提供する必要があります。 次のConnectionStringはme_のために働いた

_Driver = \ {PostgreSQL}; Server = localhost; Port = 5432; Database = TestMasterMap; Uid = postgres; Pwd =; _

_DSNを作成するには、[管理ツール]→[データソース(ODBC)]に移動して、ユーザーDSNを作成する必要があります。 これが完了したら、SQL ServerインポートおよびエクスポートウィザードのDSNテキストボックスにDSN名を指定できます。

'' '' '

あるコメント者は、それは機能したが、大きなテーブルで「タプルの読み取り中にメモリ不足」エラーが発生したと主張しました。 したがって、300万行を超えるテーブルの場合、インポートを300万行のチャンクに分割する必要がありました。

また、http://pgfoundry.org/projects/npgsql [ネイティブへのリンク .NET provider for PostgreSQL] in that thread.

個人的に、これが私が一度だけやらなければならないことであり、スキーマとデータをかなりよく理解しているなら、私は試してみるでしょう

  1. PostgreSQLからデータをフラットファイルとしてエクスポートする

  2. SQL Serverでスキーマを作成します(PKまたは制約なし)

  3. SSISインポート/エクスポートウィザードを使用してフラットファイルをインポートする

  4. 次に、PKと必要な制約を作成します

SSISインポート/エクスポートウィザードとPostgreSQLを数日間操作するよりも、上記の操作にかかる時間は短いかもしれません_(ただし、これらのツールが機能していればいいと思います!)_


2


SQL Server 2008 R2のインポートウィザードを使用して、PostgreSQLからテーブルをインポートする際に問題が発生していました。 PostgreSQL ODBCドライバーがインストールされていたため、インポートウィザードのデータソースには「.dbc for Odbc」を選択し、PostgreSQLデータベースのDSN名を指定しました。 ウィザードはテーブルを問題なく見つけましたが、インポートを実行しようとしたときにエラーが発生しました

_ _ ソースデータと宛先データの列情報を取得できませんでした。

「請求」→ [dbo]。[請求]:

–列-1が見つかりません。 _ _

Microsoftのブログ投稿https://blogs.msdn.microsoft.com/dataaccesstechnologies/2010/09/09/sql-server-import-export-wizard-fails-while-trying-to-retrieve-theで解決策を見つけました-data-from-pervasive-database / [こちら]。 どうやら問題は、列のメタデータを報告するときに、さまざまなODBCドライバーが異なる属性名を使用することです。 インポートを機能させるには、「ProviderDescriptors.xml」ファイルを編集する必要がありました。

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

の中に …​

  1. 要素の属性を変更する必要がありました…​

  1. 〜へ

つまり、 MaximumLengthColumnName、` NumericPrecisionColumnName`、および NumericScaleColumnName`属性値をそれぞれ、" "LENGTH" `、 "PRECISION" `、および" "SCALE" `に微調整する必要がありました。

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


1


上記の答えをコメントし終えたので、http://www.sql-workbench.net [SQL WorkbenchJ]を試すことを考えました。それは私にとって非常にうまく機能したデータポンプ機能を備えています。 PostgreSQLデータベースからSQLサーバーインスタンスにデータをエクスポートできました。

これをバッチモード(シェル経由)で実行する場合は、次のようにします:https://groups.google.com/forum/#!topic/sql-workbench/v64gS33-fz0[Googleグループスレッド] 。 議論で言及されたWbCopyコマンドは、私が見つけることができるどこにも実際には文書化されていませんが、データポンプインターフェースを介して生成し、必要なものを変更できます。