A restauração de bancos de dados é um procedimento comum nas atualizações e rollouts de ambientes computacionais, e sua validação é fundamental para assegurar que eles possam ser recolocados em produção.
O PostgreSQL é um SGBD bastante estável e suas versões mais recentes têm checksum em nivel de bloco. No entanto ele não possui uma ferramenta nativa para testar as bases de dados.
Este artigo ensina formas de verificação das bases geradas com PostgreSQL, através de seus próprios utilitários. Foi escrito em conformidade às experiências de recuperação de dados adquiridas na Hosco.
O servidor SQL deve estar configurado e operante. Os programas pg_dump e pg_restore, que acompanham pacotes de instalação do PostgreSQL, precisam estar disponíveis no ambiente.
A forma mais rápida de instalação é usando gerenciadores de pacotes como Apt, Yum, Dnf, Pacman, Zypper, Slapt-get, Homebrew, Pkg, entre outros.
Em Windows pode se usar um instalador da página de downloads do PostgreSQL.
A tarefa de gerar uma cópia ou dump do banco de dados já é uma forma de teste, aleḿ de ser uma questão básica de segurança.
O backup de uma base íntegra não gera saídas de texto no terminal.
Eventuais mensagens de falha durante esta etapa indicam problemas com o banco.
O backup pode ser gerado em arquivo dump de texto plano (ASCII) ou comprimido pela zlib.
pg_dump -U postgres base_de_dados > base_de_dados_dump.sql
pg_dump -Fc -U postgres base_de_dados > base_de_dados_dump.sql
Em caso de host remoto, é necessário incluir o parâmetro -h ip_do_host.
O fato do arquivo de backup (dump) ter sido gerado sem erros, já indica alta probabilidade do banco estar íntegro. Mas para aumentar a segurança do procedidmento, é importante que sejam feitos outros testes - como analisar o conteúdo do arquivo de dump.
pg_restore -l base_de_dados_dump.sql | more
pg_restore -l base_de_dados_dump.sql > base_de_dados_dump.txt
(> redireciona toda a saída do comando para um arquivo de texto)
Esta tarefa pode demorar, dependo do tamanho do banco e dos recursos de hardware. Quanto mais cores de processamento, mais memória e maior velocidade de I/O, mais rápido será.
createdb -U postgres tempdb
pg_restore -d tempdb base_de_dados_dump.sql
A execução bem sucedida do comando pg_restore não gera saídas de terminal, por padrão. Mas são aceitáveis eventuais alertas causados pelas diferenças entre o ambiente original e o atual. Eles podem ser ser evitadas com uso de parâmetros como --no-owner, --schema e --if-exists.
Por outro lado, mensagens de erro referentes a cabeçalhos de arquivos, tabelas corrompidas e índices com falha, podem indicar problemas graves no arquivo dump ou na base que o gerou. Cabe ao DBA analisar e interpretar as mensagens exibidas na execução do pg_restore.
O Postgre é um SGBD (Sistema Gerenciador de Bancos de Dados) muito robusto que pode suportar grande volume de dados. Também é muito seguro e seus desenvolvedores afirmam que ele é imune a inconsistências. No entanto, falhas em nível de armazenamento podem comprometer qualquer banco de dados. Nestes casos, é fundamental que as bases e seus dumps sejam devidamente testados.
Em cenários onde há informações críticas, é importante parar o serviço do Postgres e evitar procedimentos de reparo. Recomendamos consultar a Hosco, que é uma empresa especializada em recuperação de dados de storages, servidores e ambientes computacionais diversos.