1

マルチデータベース環境で、すべてのデータをデータベースから別のデータベースに移動する方法は?

設定は次のようになります。

DATABASES = {
    'default': {},
    'users': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.sqlite3',
        'USER': 'user',
        'PASSWORD': 'superS3cret'
    },
    'customers': {
        'NAME': 'customer_data',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'cust',
        'PASSWORD': 'veryPriv@ate'
    }
}

これを行うための簡単なソリューション/アプリはありますか? 一方向の移行で十分ですが、複雑な外部キーと多対多接続を持つ多数のモデルとオブジェクトがあるため、モデルとオブジェクトを反復処理して別の場所に保存しても問題は解決しません。

loaddataオブジェクトの作成は信号を使用して別のオブジェクトを作成し、これにより一意のキーが台無しになるため、失敗します。

バックエンドが異なるため、SQL ダンプの使用は簡単ではありません。私はこれを試しましたが、外部キーを台無しにしない sqlite3 データベースから psql ダンプを作成することができませんでした。

したがって、データベースから別のデータベースにデータをロードするが、シグナルを送信せず、外部キーでも機能するソリューションが必要です。しかし、これを行うものは見つかりませんでした。

4

2 に答える 2

1

最後に、これを解決することができました。

を使用してテーブルを作成しました

manage.py syncdb --all
manage.py migrate --fake

loaddata整合性の問題により、でのダンプのロードが機能しませんでした。(例えば、壊れた外部キー制約)

そのため、テーブルを変更する必要がありました。壊れた制約を削除したところ、loaddata問題なく実行できました。

ただし、いくつかの制約を削除したため、もちろんデータベースはまだ壊れていました。psqlしたがって、シェルを使用してテーブルを再度変更する必要がありました。

pgAdmin は、ユーザー フレンドリーなインターフェイスに関連するダンプ クエリを異なる制約ごとに個別に表示するため、便利です。

于 2014-02-27T23:06:03.467 に答える
-1

インスタンスをあるデータベースから別のデータベースに移行するためのPythonスクリプトを作成するだけです.django-extensions runscriptを使用してそのスクリプトを実行します

例えば

# Move Foo table data from one to another
for each_foo in Foo.objects.using("users").all():
  # _create foo instance in customer_data
  foo_obj, status = Foo.objects.using("customers").get_or_create(
                                            foo_name=each_foo.foo_name, 
                                            foo_code=each_foo.foo_code)
于 2015-04-02T11:42:52.167 に答える