Confuso sobre backup / restauração do postgresql e mudanças de esquema / restauração

1

Sou um desenvolvedor que, na maioria das vezes, sabe o que é quase nada sobre administração de banco de dados. Só agora eu tenho tentado verificar novamente um script de atualização do banco de dados (algo que eu posso, principalmente, gerenciar em geral), e porque faz algumas coisas que eu queria fazer um backup para que se ele estiver quebrado eu possa restaurar, consertar o script e tente novamente, sem ter que se preocupar com manualmente desfazer as alterações do esquema parcial.

Bem, o que me confunde é que depois que meu script de atualização realmente falhou depois de passar por alguns ALTER TABLE passos, quando eu faço a restauração eu recebo vários erros (de tabelas não relacionadas) sobre chaves duplicadas, violações de restrição nulas , e assim por diante. Além disso, as alterações de esquema feitas pelo meu script aparentemente não são feitas pela restauração.

Então, parece-me que devo estar interpretando mal algum aspecto básico de como o processo de despejo / restauração funcionou. Tudo o que fiz foi criar um arquivo de backup do banco de dados com "pg_dump", que depois retornei ao "psql". Principalmente funcionou, exceto por alguns erros e, como eu disse, a falha em restaurar o próprio esquema para seu estado anterior. Isso simplesmente não tenta fazer isso? Existe um processo a seguir que faria o que eu estava esperando (isto é, restauração completa para ex-estado exato)?

Eu sou a única pessoa que usa esse banco de dados; é um servidor local na minha estação de trabalho, então não é como se outros desenvolvedores estivessem mexendo com ele enquanto eu fazia minhas coisas.

Isso é postgresql 8.4 em uma máquina Ubuntu Linux (natty), se for importante.

    
por Pointy 13.06.2011 / 16:58

2 respostas

3

A essência do que você perdeu é que, a menos que seu comando pg_dump inclua a opção -c ( clean - Elimine objetos antes de criá-los), você precisa descartar todas as tabelas antes de restaurar. pg_dump produz SQL para recriar tabelas e carregar os dados de volta para eles, mas se a tabela já existir, o comando CREATE TABLE falhará (é por isso que seu esquema não voltou ao que você esperava) e se já houver dados nas tabelas você vai acabar com linhas duplicadas, ou muitos erros sobre chaves duplicadas (dependendo se as chaves estão definidas ou não).

Você deve reservar um tempo para ler, ler e entender a documentação do Postgres sobre backup / restauração e a página do manual pg_dump . Na verdade, sugiro ler a documentação do Postgres para quaisquer áreas em que você não se sinta 100% confiante e / ou perguntando nas listas de discussão. A documentação do Postgres é de notável qualidade, e eu a mantenho ao lado do Manual do FreeBSD como um exemplo do tipo de documentação todos projetos de código aberto devem se esforçar para produzir ...

    
por 13.06.2011 / 17:30
1

Uma alternativa à abordagem pg_dump -c é usar pg_restore --clean.

Nós usamos pg_dump -Fc, o que impede o uso de -c.

    
por 05.07.2011 / 22:47

Tags