テーブルスキーマとデータの両方を含む、MS SQL Server 2005(または多分2008)に移行したいPostgreSQL 8.3.1のデータベースがあります。データベースのサイズは約50GB、行数は約400,000,000なので、単純なINSERTステートメントは問題外だと思います。誰もがこの移行を実行するための最良のツールを推奨できますか?明らかにそれは信頼できる必要があるので、データはソースDBのデータとターゲットDBでまったく同じであり、妥当な時間内にこの量のデータをコピーできる必要があります。
私が試したものは大きなテーブルで機能しなかったため、データにサードパーティのツールを使用しなくなりました。 SSISでさえ失敗しました。ただし、スキーマには商用ツールを使用しました。だから私の変換プロセスは次のとおりでした:
変換ステップでは、pg_dumpとbcpで使用される次のような形式の違いに対処しました。
また、Postgresで問題なかったいくつかの一意の制約がMSSQLで違反されていることもわかりました。そのため、それらを削除する必要がありました。これは、MSSQLではNULL = NULLであるため(つまり、NULLは一意の値として扱われるため)、Postgresではそうではなかったためです。
SQL 2005ボックスに適切なPostgresサポートドライバがインストールされている(またはODBC経由でPostgresを使用する、またはPostgresからファイルにデータをダンプしてそこからインポートする)場合は、SQL Serverのインポート/エクスポートウィザードを使用できます。データをコピーするための注文。これにより、さまざまな質問が表示され、適切なバッチ挿入操作を使用して、SQL Server Integration Services(SSIS)パッケージジョブとしてインポートが実行されます。
ただし、そのウィザードがオプションではない場合、多数の行があるにもかかわらず、行の個々のサイズは平均で135バイト未満であり、50 GBのトランザクションが発生するのに十分なトランザクションログスペースが与えられていることを考慮する価値があります '単純な挿入」ステートメント自体は問題外ではありません。
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ドルほどで見つけた中で最も安いものでした。これまでのところ、投資する価値はあります。
そこに行きます:)残念ながら、それは少し高価です。