2012-01-17 8 views
4

私はDjango 1.2と1.3とMySqlバックエンドを使用します。DjangoデータベースのバックエンドをMySqlからPostgreSQLに変更する

! Error found during real run of migration! Aborting. 

! Since you have a database that does not support running 
! schema-altering statements in transactions, we have had 
! to leave it in an interim state between migrations. 
... 
! The South developers regret this has happened, and would 
! like to gently persuade you to consider a slightly 
! easier-to-deal-with DBMS 

のMySQLからPostgreSQLとの私のデータベースを移行すると、このエラーを回避する可能性がある場合、私は思っていた:南と私のMySQLデータベースの移行時にエラーメッセージが出ている間に一度

。次に、MySqlからPostgreSQLへの移行は、MySqlのdbaseでdumpdataを実行し、PostgreSQLと新しいバックエンドのloaddataを指すように設定を変更しますか?

私はthis stackoverflow質問を見ましたが、彼のデータベースが大きすぎると話しています。私は自分のデータベースでそうなるとは思わない。私はDjangoプロジェクトにカスタムSQLコマンドを持っていません。

+0

だけ答えhttp://stackoverflow.com/で与えられたmysql2postgresを試してみてくださいa/8385094/540341 - すべてに問題がなければ数分かかります。 100%安全に移行する前にdbとconfigsをバックアップすることができます。 – filiprem

+0

別のオプションは、MySQL上にとどまるが、テーブルInnoDBエンジンを変更することです。 http://stackoverflow.com/questions/4834415/does-djangos-south-migration-tool-work-for-innodb – filiprem

+0

@filiprem、ありがとう、それはおそらく動作します。特にpostgreSQLへの移行がこれを避けるのであれば興味があります。私は移行したいいくつかの理由があります。私はmysql2postgresについて読んでいますが、単純なdumpdata/loaddataで何かがうまくいかない場合に備えて良いフォールバックになります。 –

答えて

5

私はこのエラーをSouthを使用して見てうんざりしていましたが、PostgreSQLに切り替えるとそれが追放されました!

上記のコメントでRubyで書かれたmysql2postgresアプリがうまくいきませんでした。実行すると詳細が画面に出力されますが、データはコピーされません。理由は分かりません。しかし、喜んで完璧に働いたことのPythonの書き換えは(最終的には、私のため)があります:
http://pypi.python.org/pypi/py-mysql2pgsql

私が見つけた唯一の落とし穴だった:

当初、私はそれが中にテーブルを設定するのが最も安全だろうと思いましたPostgreSQL dbをsyncdb経由で実行し、データのみを移行します。私はこれを試しましたが、テーブルはアルファベット順に移行されていますが、これは一部のテーブル(テーブル内の行はまだインポートされていません)の外部キー制約に違反しています。

次に、構造体+データの移行を試みました。これはうまく移行されましたが、後でDjangoのいくつかの問題、特に管理サイトに遭遇しました。 Djangoが持つテーブルの制約から、移行スクリプトがいくつかの異なるテーブル制約を作成したように思えました。

mysql2pgsqlスクリプトをハックしてyaml config only_tablesプロパティに指定されたテーブルの順序を守り、syncdb + data-only migrationを実行することで解決しました。試行錯誤によって、すべてのインポートが正常に完了するまで、移行のためにテーブルの順序をシャッフルしました。

UPDATE:あなたがメインのバージョンから、今、これを行うことができますので、上記のハックのため
マイプル要求が受け入れられました:
https://github.com/philipsoutham/py-mysql2pgsql

+0

ありがとう、これは私が必要とした情報です。あなたの成功した移行ルートを試すつもりです。 –

+0

現在、このソリューションを展開中です。それは今までに遭遇した問題だけです:http://stackoverflow.com/questions/6466836/postgres-sequences-without-an-owned-by-attribute-do-not-return-an-id-in-django –

関連する問題