mysqlをpostgresqlに変換する方法は?[閉まっている]


14

大きなmysqlデータベースをpostgresqlに変換する変換ツールを切望しています。ツール/スクリプトが必要です:

  • 自由
  • Linuxで動作します
  • 使いやすく、バグがありません
  • 実際に試してみて、動作することを確認しました
  • できれば、JavaまたはRubyで作成しないでください

ここにリストされているさまざまなツールを試しましたが、うまくいきませんでした。

前もって感謝します。


私はPostgreSQLの専門家ではありませんが、今でも学んでいます。回答を削除しました。ただし、他の誰かが投稿したpostgresqlでmysqldumpを使用することについて別の質問があります:dba.stackexchange.com/q/9792/877。それが役に立てば幸い !!!
RolandoMySQLDBA

1
Javaで書かれたツールの何が問題になっていますか?そして、それらすべてで「機能していない」ことを正確に説明すると役立つかもしれません。
a_horse_with_no_name

回答:


7

2つの非常に異なるDBMS間で移行する必要があり多くのことをより多くのデータだけを移行するよりも。ただし、通常はデータの移行が最も簡単な部分です。

私が試した方法は無料で、それが機能することを確認できます:

  • mysqlスキーマのみのダンプを作成します
  • テキストエディターと多くの検索と置換を使用してSQLを調整する
  • Postgresで変換されたSQLを実行する
  • MySQLからプレーンテキストダンプを作成します(CSVなどの区切り形式)
  • PostgreSQLのCOPYコマンドを使用してデータをインポートします

MySQLの動作に依存して違法なデータを受け入れている場合(2月31日など)、データのインポートは実際には難しい場合があります。

私の推測では、これはツールを検索し、それらの束を評価してから、選択したものを理解しようとするよりも速くなるだろうということです。しかし、それはあなたがどんな種類の「大きな」を指しているかによります。大きなテーブルが数百個ある場合、これは現実的ではないかもしれません。行の数だけが大きい場合は、おそらくこれが最も簡単な方法です。

などのDBMSに依存しない(XML)形式でデータベーススキーマをダンプすることができますそこにいくつかのツールがありますLiquiBaseをSchemaSpyまたはWbSchemaReportが。おそらくLiquibaseが最も使いやすいでしょう。その他は、生成されたXMLを変換するために、XSLTを作成/拡張する手作業が必要になります。

あなたは、MySQLにトリガーやストアドプロシージャを使用している場合、私はそこになると信じていない任意の、その後、生成された手順は、おそらくターゲットDBMSのいずれかの高度な機能を使用することはありません-その後の主要なマニュアルの固定を必要とせずにそれらを翻訳することができ、自動化ツール。


6

最近それをしなければならなかったし、ツールを探してそれを使ってできるようになるのに時間がかかりすぎたので、私はvimとsubstitution-fooで手でそれをしました

  • 取り替える INT NOT NULL AUTO_INCREMENT(またはこのようなもの)をSERIAL
  • 関連するeverythig文字列をTEXT(使用時に速度の違いなしTEXTVARCHARまたは類似の)
  • それらのf *** ing backticksを取り除く `
  • Postgresにはストレージエンジンがないため、削除します ENGINE InnoDB(または何でも)
  • 削除する UNSIGNED
  • すべてのBLOBフィールドは BYTEA
  • 文字列は一重引用符を使用します 'をます
  • 9.1以降、Postgresサポートで文字列連結を使用する場合は注意が必要です CONCATは非標準の文字列連結のフォールバックとしてします。 'string' || ' string'
  • 手続きコードを書き直してください...
  • 予約されている名前(テーブル、名前など)と大文字の名前に注意してください。二重引用符で囲む必要があります"
  • 構文は変わらないため、インデックスはほぼ同じである必要があります
  • 私が忘れてしまったことすべてについては、このトピックに関するウィキブックをご覧ください

これらの箇条書きのそれぞれは、単一の置換で実行する必要があります。

スキーマとデータを別々にエクスポートしました。INSERTの代わりにs を使用してくださいCOPY。行き詰まっている場合は、データのクリーンアップは(ほとんど)必要ありません。すべてがオンになっていることを確認しますUTF-8。2つの別個のファイルを使用すると、スキーマがより管理しやすくなり、編集するための1GBファイルがありません。

スキーマをロードすると、エラーのある場所に関する非常に詳細な情報が得られるため、デバッグは非常に簡単です。


こんにちは、MySQLのBLOBフィールドデータをPostgreSQLのBYTEAに変換するにはどうすればよいですか?Mysqlのデータをinsert sqlとしてダンプすると、PostgreSQLにデータをロードできません。
フラン

1

私はこれを試したことがないので捨てていますが、Tungesten Replicatorはあなたが望むことをするかもしれません。これは主に複製ツールですが、少なくともデータ部分で役立つブートストラッププロセスがあるかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.