Pregunta

En un entorno de varias bases de datos, ¿cómo mover todos los datos de una base de datos a otra?

Configuración se ve así:

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'
    }
}

¿Hay alguna solución / aplicación simple para hacer esto?Aunque una migración unidireccional es suficiente, ya que hay docenas de modelos y objetos con canales extranjeros complejos y muchas conexiones, iterando sobre modelos y objetos, y guardándolos en otro no resuelve mi problema.

loaddata también falla, porque la creación de objetos usa señales para crear objetos de notas, y esto desordena las teclas únicas.

Uso de los volcados SQL no es trivial incluso, ya que los backends son diferentes.He intentado esto, no pude lograr hacer volcados PSQL de mi base de datos SQLITE3, que no arruinan las llaves extranjeras.

Entonces necesito una solución, que carga los datos de una base de datos a otra, pero no envía señales, y también funciona con llaves extranjeras.Pero no pude encontrar nada que haga esto.

¿Fue útil?

Solución

Finalmente me las arreglé para resolver esto.

He creado tablas usando

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

Los vertederos de carga con loaddata no funcionaban debido a problemas de integridad.(Restricciones de clave externa rota, por ejemplo)

Así que tuve que alterar mis mesas.Quité las restricciones rotas, y luego pude ejecutar loaddata sin ningún problema.

Sin embargo, por supuesto, mi base de datos aún estaba rota ya que dejé caer un par de restricciones.Por lo tanto, simplemente tuve que alterar mis tablas nuevamente, usando la cubierta de psql.

PGADMIN fue útil, ya que muestra las consultas de descarga relevantes en una interfaz fácil de usar, por separado para cada restricción diferente.

Otros consejos

Acabo de escribir un script de Python para migre la instancia de una base de datos a otra , ejecute ese script usando django-extensions runscript

por ejemplo

# 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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top