Como obter um backup e teste de banco de dados PostgreSQL completos e funcionais

45

Eu esperava conseguir uma resposta clara sobre como garantir um backup completo do Postgres, como você faria com o MS SQL Server, e depois cuidar de usuários órfãos.

Pelo que li, e pode estar errado, encontrar um bom blog do PostgreSQL tem sido um desafio. Por isso, sinta-se à vontade para recomendar algumas para mim. Preciso descobrir como esse aplicativo funciona para que eu possa confiar nos meus backups e no Slony. replicação. Eu tinha um desenvolvedor restaurar um backup que eu tomei de pgAdminIII via custom, directorye tarformato enquanto seleciona OIDs mas ele disse que dois deles não foram carregados, tarfez mas foi apenas o diretório, não os dados. Estou realmente confuso agora.

  1. Estou usando o PGAdminIII, ele tem uma opção pg_dumpe pg_dumpall. Quero fazer backup de tudo o que preciso para testar a restauração desse banco de dados em algum lugar e verificar se sim, todos os dados de que precisamos e nosso backup são bons. Eventualmente, eu quero escrever um script de restauração automática, mas um dia de cada vez.

pg_dumpallaparentemente tem uma -globalsopção que deve fazer backup de tudo, mas a ajuda para pg_dumpallmostra -g, --globals-only dump only global objects, no databasesuma --globalsopção , não uma .

Eu pensei pg_dumpallque pelo menos faria backup de chaves estrangeiras, mas mesmo isso parece ser uma 'opção'. De acordo com a documentação , mesmo que pg_dumpalleu precise usar uma -oopção para fazer backup de chaves estrangeiras, não consigo imaginar quando não gostaria de fazer backup de chaves estrangeiras e isso faria mais sentido como opções padrão.

  1. Como eu cuidaria de usuários órfãos e validaria que tenho tudo? Eu realmente gostaria de restaurar meu arquivo de backup em outro servidor e verificar se tudo funciona. Se alguém tiver alguma sugestão sobre como fazer um backup real no PostgreSQL e restaurar, ficaria muito grato.

Eu tinha um servidor PostgreSQL, mas ainda não consigo entender por que o aplicativo não faria backups OIDpor padrão! Parece que 99,9% das vezes você gostaria disso.

ATUALIZAÇÃO 1:

A documentação do Postgres menciona que a globalsopção que eu estava procurando parece ser uma opção padrão nesta versão, mas ainda precisa da -oopção. Se alguém puder verificar ou me fornecer um exemplo de comando para restaurar um único banco de dados em outro lugar com tudo o que precisa, eu agradeceria.

Editar: sendo solicitado pelo site para mostrar a exclusividade desta pergunta, editando minha pergunta. Essa pergunta levanta a questão e obtém a clareza dos OIDs nos backups, a diferença entre globais e não globais, além de testar restaura recomendações para garantir que o backup seja bom, e não apenas o backup. Devido às respostas, consegui fazer backup, descobrir globals / oids e iniciar um processo de restauração de teste todas as noites no Postgres usando tarefas cron. Obrigado pela ajuda!

Ali Razeghi
fonte
Possível duplicata do backup completo do banco de dados PostgreSQL
raphael

Respostas:

58

Você pode despejar todo o cluster do PostgreSQL com pg_dumpall. São todos os bancos de dados e todos os globais para um único cluster. Na linha de comando do servidor, eu faria algo assim. (A mina está escutando na porta 5433, não na porta padrão.) Você pode ou não precisar da opção --clean.

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql

Isso inclui os globais - informações sobre usuários e grupos, espaços de tabela e assim por diante.

Se eu fosse fazer backup de um único banco de dados e movê-lo para um servidor temporário, despejaria o banco de dados com pg_dump e despejaria os globais com

  • pg_dumpall --globals-onlyou
  • pg_dumpall --roles-only (se você precisar apenas de papéis)

como isso.

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql

Saídas são apenas arquivos de texto.

Depois de mover esses arquivos para um servidor diferente, carregue primeiro os globais, depois o dump do banco de dados.

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql

Eu pensei que o pg_dumpall faria pelo menos backup de chaves estrangeiras, mas mesmo isso parece ser uma 'opção'. De acordo com: http://www.postgresql.org/docs/9.1/static/app-pg-dumpall.html, mesmo com pg_dumpall, preciso usar a opção -o para fazer backup de chaves estrangeiras

Não, essa referência diz "Use esta opção se o seu aplicativo referenciar as colunas OID de alguma forma (por exemplo, em uma restrição de chave estrangeira). Caso contrário, essa opção não deverá ser usada." (Ênfase adicionada.) Acho improvável que seu aplicativo faça referência às colunas do OID. Você não precisa usar esta opção para "fazer backup de chaves estrangeiras". (Leia o arquivo de despejo no seu editor ou visualizador de arquivos.)

Mike Sherrill 'Recolha de Gatos'
fonte
3
O nome do banco de dados não está ausente na linha em que o sandbox.sql está sendo importado? psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
SebK 19/07
Ele vê que pg_dumpall, versão 9.5, não funciona corretamente com NULLvalores ao usar COPY. Eu recebo muitos erros como este: psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.Ao importar de volta para o Postgres 10 usandopsql -f /tmp/dumpall.sql
piotrekkr