Pergunta

Em uma multi-ambiente de banco de dados, como mover todos os dados de um banco de dados para outro?

Configurações parecido com este:

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

Existe alguma solução simples/app para fazer isso?Apesar de um caminho de migração é suficiente, uma vez que existem dezenas de Modelos e objetos complexos foreignkey e muitos-para-muitos conexões, iterando Modelos e objetos, e salvá-los em outro não resolver o meu problema.

loaddata falha muito, porque a criação de objeto usa sinais para criar nother objetos, e isso mexe-se as chaves únicas.

Usando o sql despejos não é trivial mesmo, uma vez que os motores são diferentes.Eu tentei isso, eu não conseguia fazer psql copia do meu banco de dados sqlite3, que não aquela bagunça chaves estrangeiras.

Então eu preciso de uma solução, que carrega os dados de um banco de dados para outro, mas não envia os sinais, e funciona com chaves estrangeiras bem.Mas eu não poderia encontrar qualquer coisa que faz isso.

Foi útil?

Solução

Finalmente eu consegui resolver isso.

Eu criei usando tabelas

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

Carregamento de despejos com loaddata não trabalho devido a problemas de integridade.(Quebrado restrições de chave estrangeira, por exemplo)

Então eu tive que alterar meu tabelas.Tirei o quebrado a restrições e, em seguida, eu poderia correr loaddata sem problemas.

No entanto, claro que o meu banco de dados ainda estava quebrado desde que eu deixei cair algumas restrições.Portanto, eu simplesmente tinha que alterar a minha tabelas novamente, usando psql shell.

pgAdmin veio a calhar, pois mostra relevante despejo de consultas em uma interface de usuário amigável, separadamente para cada restrição diferente.

Outras dicas

Eu tinha acabado de escrever um script python para migrar a instância de um Banco de dados para outro, Execute esse script usando django-extensions runscript

por exemplo

# 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top