Backup PostgreSQL com pg_dump: rotina verificável

Ilustração técnica sobre Backup PostgreSQL com pg_dump: rotina verificável
Ilustração sobre Backup PostgreSQL com pg_dump: rotina verificável

Resposta Rápida / TL;DR

Use pg_dump em formato custom, grave o resultado em destino protegido, registre sucesso e restaure periodicamente em um banco isolado com pg_restore.
Índice do artigo

    Resposta rápida

    Use pg_dump para exportação lógica e pg_restore para validar o retorno. O arquivo deve sair do mesmo disco do banco, ter acesso restrito e ser acompanhado por logs. A rotina só é confiável quando uma restauração é executada em ambiente separado e os dados esperados são conferidos.

    Defina o objetivo de recuperação

    Pergunte quanto de dados pode ser perdido e quanto tempo a recuperação pode levar. Um dump diário pode não atender uma aplicação que precisa de recuperação por minuto. Para bases grandes ou requisitos rigorosos, combine backups físicos, WAL/PITR e testes documentados.

    Gere um dump custom

    export PGHOST=127.0.0.1
    export PGPORT=5432
    export PGUSER=backup_user
    export PGDATABASE=appdb
    pg_dump --format=custom --file=/var/backups/postgresql/appdb-$(date +%F).dump
    

    Não coloque senha na linha de comando. Use .pgpass com permissões 600, secret manager ou autenticação apropriada. O usuário de backup deve ter somente os privilégios necessários.

    Confira o arquivo:

    pg_restore --list /var/backups/postgresql/appdb-2026-09-09.dump | head
    

    Envie para um destino separado

    Copie para storage externo ou outro host com criptografia e retenção. Ter três cópias no mesmo disco não protege contra falha do volume ou exclusão acidental. Verifique tamanho, data e código de saída do processo.

    Restaure em banco isolado

    createdb -h 127.0.0.1 -U postgres appdb_restore_test
    pg_restore -h 127.0.0.1 -U postgres \
      --dbname=appdb_restore_test --clean --if-exists \
      /var/backups/postgresql/appdb-2026-09-09.dump
    psql -d appdb_restore_test -c 'select count(*) from tabela_critica;'
    

    Use um banco e credenciais de teste. Não restaure sobre produção para “ver se funciona”. Valide tabelas essenciais, sequência, extensões e permissões da aplicação.

    Automatize com responsabilidade

    Um timer pode criar o dump, calcular checksum, enviar ao destino e falhar se qualquer etapa retornar erro. Adicione lock, rotação e alerta. Simule uma restauração em uma frequência compatível com o risco; a janela deve medir também tempo e consumo de recursos.

    Durante um backup, monitore espaço e I/O. Hospedar banco em uma VPS exige reservar margem para dados, dumps temporários e logs.

    Checklist

    • [ ] RPO/RTO definidos.
    • [ ] Credencial sem senha no comando.
    • [ ] Destino fora do volume principal.
    • [ ] Dump listado e checksum registrado.
    • [ ] Restauração isolada validada.

    FAQ

    pg_dump bloqueia o banco?

    Ele usa um snapshot consistente, mas ainda pode gerar carga e interagir com locks. Teste o impacto e escolha a janela adequada.

    Posso guardar só o último dump?

    Isso reduz a capacidade de voltar antes de uma corrupção descoberta tarde. Defina retenção conforme o risco e o custo.

    O que registrar por execução

    Guarde nome da base, início e fim, tamanho, checksum, versão do cliente, destino e código de saída. Não grave a senha nem dados completos do cliente no log. Se o dump falhar por espaço, lock ou permissão, a rotina deve terminar com erro e notificar alguém; um arquivo parcial não pode ser confundido com backup válido. Uma restauração periódica também mede o tempo necessário para recuperar o serviço, informação que o comando de exportação sozinho não fornece.

    Download Gratuito Template Pronto para n8n & Evolution API

    📦 Template n8n: Agente de IA com WhatsApp + Evolution API

    Baixe o arquivo JSON pronto para importar: Webhook configurado, tratamento de remetente, nó de OpenAI e disparo via Evolution API.

    Comentários (8)

    Marcelo Gomes

    Excelente artigo sobre indexação e explain analyze. Descobrimos um sequential scan que estava travando o banco nos horários de pico.

    Carolina Rocha

    As regras de connection pooling com PgBouncer reduziram drasticamente a sobrecarga de conexões no servidor.

    Amanda Soares

    Muito bom o comparativo entre bancos relacionais e vetoriais para aplicações de busca semântica. Ajudou muito na escolha da arquitetura.

    Camila Ferreira - Dev Team

    O particionamento de tabelas por data salvou nossa base de logs. Consultas que levavam minutos agora rodam em milissegundos.

    Camila Alves

    Como profissional da área, posso confirmar que essas práticas realmente fazem diferença no dia a dia.

    Fernando Lima - Digital Agency

    Implementei essas ideias no meu projeto e os resultados foram impressionantes. Obrigado pelo conhecimento compartilhado!

    João Gomes

    Excelente conteúdo! Aprendi conceitos que não encontrava em outros lugares em português.

    Ana Rodrigues - Dev Team

    Artigo muito bem escrito e explicativo! Já compartilhei com toda a equipe da empresa. Tem algum repositório GitHub com exemplos práticos?

    ← Voltar para o blog