Garantir a integridade e disponibilidade dos dados é uma prioridade para qualquer ambiente de produção. No PostgreSQL, além dos backups lógicos com pg_dump, você também pode fazer backups físicos mais rápidos e completos usando o pg_basebackup.

Neste artigo, você vai aprender como funciona o pg_basebackup, quando usá-lo e como automatizar backups físicos seguros e consistentes em seu ambiente PostgreSQL.


O que é o pg_basebackup?

O pg_basebackup é uma ferramenta nativa do PostgreSQL usada para criar backups físicos em nível de bloco, ou seja, uma cópia exata dos arquivos do cluster de dados.

Ele é ideal para backups completos de bancos de produção, réplicas físicas (streaming replication), e ambientes que exigem alta velocidade de restauração.


pg_basebackup vs pg_dump

Recursopg_basebackuppg_dump
Tipo de BackupFísicoLógico
VelocidadeAlta (blocos)Moderada (SQL)
Suporte a ReplicaçãoSimNão
GranularidadeBaixa (tudo ou nada)Alta (tabelas, schemas)
Ideal paraProdução, RéplicasTestes, Dev, Export

Pré-requisitos para usar o pg_basebackup

  • Acesso ao servidor como usuário com permissão de superusuário
  • O parâmetro wal_level do PostgreSQL configurado como replica ou superior
  • Um usuário com a role REPLICATION
  • Acesso habilitado no arquivo pg_hba.conf para conexões de replicação

Como Criar um Backup com pg_basebackup

🔹 1. Criar um usuário com permissão de replicação

No PostgreSQL:

sql
CREATE ROLE backupuser WITH REPLICATION LOGIN ENCRYPTED PASSWORD 'senha_segura';

🔹 2. Ajustar pg_hba.conf

Adicione uma linha como:

host replication backupuser 0.0.0.0/0 md5

Reinicie o PostgreSQL após ajustes.

🔹 3. Executar o backup com pg_basebackup

bash
pg_basebackup -h 127.0.0.1 -p 5432 -U backupuser -D /caminho/para/backup -F tar -z -P

Parâmetros principais:

  • -D: destino do backup
  • -F tar: formato compactado (alternativa: plain)
  • -z: comprimir com gzip
  • -P: mostrar progresso

🔒 Dica: use .pgpass para evitar a digitação da senha em scripts automatizados.


Automatizando com Crontab (Backup Diário)

Exemplo de agendamento diário às 2h da manhã:

0 2 * * * pg_basebackup -h 127.0.0.1 -U backupuser -D /backups/dia_$(date +\%F) -F tar -z -P

Restaurando um Backup com pg_basebackup

  1. Pare o PostgreSQL:
bash
sudo systemctl stop postgresql
  1. Substitua os arquivos do data_directory com o conteúdo extraído do backup
  2. Crie um arquivo recovery.signal (caso necessário em versões 12+)
  3. Inicie o PostgreSQL:
bash
sudo systemctl start postgresql

Boas Práticas

  • Use discos separados para backups e dados
  • Mantenha pelo menos 7 dias de backups rotacionados
  • Combine com ferramentas como rsync ou borgbackup para backups offsite
  • Use archive_mode = on e configure um archive_command para armazenar os WALs (Write-Ahead Logs)

Conclusão

Se você precisa de backups rápidos, completos e confiáveis, o pg_basebackup é a solução ideal em ambientes PostgreSQL corporativos. Ele permite uma restauração rápida e é a base para arquiteturas de replicação e failover.