web-dev-qa-db-ja.com

PostgreSQLデータベースをMS SQL 2005に移行するのに最適なツールですか?

テーブルスキーマとデータの両方を含む、MS SQL Server 2005(または多分2008)に移行したいPostgreSQL 8.3.1のデータベースがあります。データベースのサイズは約50GB、行数は約400,000,000なので、単純なINSERTステートメントは問題外だと思います。誰もがこの移行を実行するための最良のツールを推奨できますか?明らかにそれは信頼できる必要があるので、データはソースDBのデータとターゲットDBでまったく同じであり、妥当な時間内にこの量のデータをコピーできる必要があります。

8
EMP

私が試したものは大きなテーブルで機能しなかったため、データにサードパーティのツールを使用しなくなりました。 SSISでさえ失敗しました。ただし、スキーマには商用ツールを使用しました。だから私の変換プロセスは次のとおりでした:

  1. Full Convert Enterprise スキーマをコピーします(データなし)。
  2. pg_dumpデータを「プレーンテキスト」形式でPostgresからエクスポートします。これは、基本的にタブ区切り値(TSV)ファイルです。
  3. エクスポートされたファイルをbcpが理解できるフォーマットに変換するPythonスクリプト。
  4. bcpデータをMSSQLにインポートします。

変換ステップでは、pg_dumpとbcpで使用される次のような形式の違いに対処しました。

  • pg_dumpはファイルの先頭にPostgres固有のものを置き、データを「。」で終了しますが、bcpはファイル全体にデータが含まれていることを期待します
  • pg_dumpはNULL値を "\ N"として格納しますが、bcpはNULLの代わりに何も期待しません(つまり、列区切り文字の間にデータはありません)。
  • pg_dumpはタブを「\ t」としてエンコードし、改行を「\ n」としてエンコードしますが、bcpはそれらを文字通り扱います
  • pg_dumpでは常にタブと改行を区切り文字として使用しますが、bcpではユーザーが区切り文字を指定できます。タブまたは改行はエンコードされていないため、データにタブまたは改行が含まれている場合、これが必要になります。

また、Postgresで問題なかったいくつかの一意の制約がMSSQLで違反されていることもわかりました。そのため、それらを削除する必要がありました。これは、MSSQLではNULL = NULLであるため(つまり、NULLは一意の値として扱われるため)、Postgresではそうではなかったためです。

6
EMP

SQL 2005ボックスに適切なPostgresサポートドライバがインストールされている(またはODBC経由でPostgresを使用する、またはPostgresからファイルにデータをダンプしてそこからインポートする)場合は、SQL Serverのインポート/エクスポートウィザードを使用できます。データをコピーするための注文。これにより、さまざまな質問が表示され、適切なバッチ挿入操作を使用して、SQL Server Integration Services(SSIS)パッケージジョブとしてインポートが実行されます。

ただし、そのウィザードがオプションではない場合、多数の行があるにもかかわらず、行の個々のサイズは平均で135バイト未満であり、50 GBのトランザクションが発生するのに十分なトランザクションログスペースが与えられていることを考慮する価値があります '単純な挿入」ステートメント自体は問題外ではありません。

6
Steve Gray

10年近く経ちますが、これはまだ簡単な問題ではありません。最終的にハイブリッドソリューションになり、次のコマンドを使用してスキーマとテーブル/列のコメントをエクスポートすることにより、独自のスキーママッパーをロールバックしました。

pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql

次に、スキーマをT-SQLに変換するPHPスクリプトを記述しました。その後、次のサードパーティソフトウェアを使用して、実際に行をインポートしました(アフィリエーションなし)。

http://www.convert-in.com/pgs2mss.htm

それは少し遅いですが、今のところとても良いです。私たちのデータベースはあなたのデータベースよりも小さく、15GBしかありませんでしたが、そのツールはそれをうまく処理したようです。それはまた、私が50ドルほどで見つけた中で最も安いものでした。これまでのところ、投資する価値はあります。

0
dearsina

http://www.easyfrom.net/

そこに行きます:)残念ながら、それは少し高価です。

0
David Rickman