Como atualizar o banco de dados de produção aplicação turbogears

votos
1

Estou tendo uma base de dados de produção postgres na produção (que contém uma grande quantidade de dados). agora eu preciso modificar o modelo do tg-aplicativo para adicionar algumas novas tabelas no banco de dados.

Como eu faço isso? Eu estou usando SQLAlchemy.

Publicado 19/11/2008 em 12:00
fonte usuário
Em outras línguas...                            


4 respostas

votos
0

Se você está apenas adicionando tabelas, e não modificar qualquer uma das tabelas que têm os dados existentes na mesma, você pode simplesmente adicionar as novas definições de tabela sqlalchemy para model.py, e execute:

tg-admin sql create

Isso não vai substituir qualquer um dos seus tabelas existentes.

Para migração do esquema, você pode dar uma olhada em http://code.google.com/p/sqlalchemy-migrate/ embora eu não usei ainda me.

Sempre fazer um backup do banco de dados de produção antes da atividade de migração.

Respondeu 19/11/2008 em 13:10
fonte usuário

votos
1

A abordagem mais simples é simplesmente escrever alguns scripts de atualização SQL e use-os para atualizar o banco de dados. Obviamente que é um bastante baixo nível abordagem (como se fosse).

Se você acha que vai estar fazendo isso muito e querer ficar em Python que você pode querer olhar para sqlalchemy-migrate . Havia um artigo sobre isso na recente revista Python.

Respondeu 19/11/2008 em 13:10
fonte usuário

votos
1

Isso sempre funciona e requer pouca pensamento - única paciência.

  1. Faça um backup.

  2. Realmente fazer um backup. Todo mundo pula a etapa 1 pensamento que eles têm um backup, mas eles nunca pode encontrá-lo ou trabalhar com ele. Não confie em qualquer backup que você não pode recuperar.

  3. Criar um novo esquema de banco de dados.

  4. Defina sua nova estrutura a partir do zero no novo esquema. Idealmente, você vai executar um script DDL que constrói o novo esquema. Não tem um script para construir o esquema? Criar um e colocá-lo sob controle de versão.

    Com SA, você pode definir suas tabelas e pode construir o seu esquema para você. Isto é ideal, uma vez que você tem seu esquema sob controle de versão em Python.

  5. Mover dados.

    uma. Para tabelas que não mudam a estrutura, mover dados de esquema antigo para o novo esquema usando simples INSERIR IGNORE / SELECT.

    b. Para tabelas que fez estrutura mudança, desenvolver INSERIR IGNORE / scripts SELECT para mover os dados do antigo para o novo. Muitas vezes, isso pode ser uma única instrução SQL por nova tabela. Em alguns casos, ele tem que ser um loop de Python com duas conexões abertas.

    c. Para novas tabelas, carregar os dados.

  6. Pare de usar o esquema antigo. Comece a usar o novo esquema. Encontrar cada programa que usou o esquema antigo e corrigir a configuração.

    Não temos uma lista de aplicativos? Faz um. Sério - é importante.

    Aplicações têm hard-coded configurações DB? Consertar isso, também, enquanto você está nisso. Ou criar um arquivo de configuração comum, ou usar alguma variável de ambiente comum ou algo para (a) assegurar consistência e (b) centralizar a noção de "produção".

Você pode fazer este tipo de procedimento qualquer momento que você faz cirurgia de grande porte. Ele nunca toca o banco de dados de idade, exceto para extrair os dados.

Respondeu 19/11/2008 em 13:10
fonte usuário

votos
1

Eu concordo em geral, com John . A seleção de uma passagem e INSERIR IGNORE ing não seria prático para um grande banco de dados e criação de replicação ou diferencial multi-pass SELECT / INSERIR IGNORE s provavelmente seria mais difícil e mais propenso a erros.

Pessoalmente, eu uso SQLAlchemy como um ORM em TurboGears . Para fazer migrações de esquema eu corro:

tg-admin sql status

Para ver a diferença entre os esquemas vivo e desenvolvimento, em seguida, escrever manualmente (e controle de versão) scripts DDL para fazer as mudanças necessárias.

Para aqueles que usam SQLAlchemy independente (ou seja, não sob TurboGears), a sql statusfuncionalidade é bastante simples e pode ser encontrada aqui na fonte TG: http://svn.turbogears.org/branches/1.1/turbogears/command/sacommand.py (há versões para versões mais antigas do Python / SA no ramo 1.0, também).

Respondeu 24/12/2008 em 01:30
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more