Depois que você, como admin responsável pelo banco de dados, fez aquele backup maroto, chega a hora da verdade: restaurar os dados. E aí entra em cena o protagonista desse episódio — o comando pg_restore. Se o pg_dump era seu super-herói pra criar backups, o pg_restore é o parceiro dele que traz os dados de volta à vida.
pg_restore é usado pra restaurar dados de arquivos criados com o pg_dump nos formatos binários (custom ou directory). Se por algum motivo seu banco foi pro beleléu, ou você quer migrar os dados pra outro servidor, essa ferramenta vai ser sua melhor amiga.
Por que você precisa do pg_restore:
- Ele deixa você restaurar o banco inteiro ou só partes dele (schema, tabelas, dados).
- É uma ferramenta poderosa pra cenários de restauração mais cabulosos, onde você precisa controlar tudo nos mínimos detalhes.
Sintaxe básica do comando
Pra começar a usar o pg_restore, o básico é assim:
pg_restore -U nome_usuario -d nome_banco backup_file.dump
Parâmetros do comando:
-U nome_usuario: define o nome do usuário do PostgreSQL pra conectar.-d nome_banco: nome do banco onde os dados vão ser restaurados.backup_file.dump: arquivo de backup criado antes com opg_dumpno formatocustomoudirectory
Por exemplo, se você quiser restaurar o banco university do arquivo backup.dump usando o usuário postgres, o comando fica assim:
pg_restore -U postgres -d university backup.dump
Quando você roda esse comando, o pg_restore começa a restauração e manda os dados de volta pro banco!
Tipos de backup e compatibilidade
Nem todo backup é igual. Você deve lembrar que, quando a gente faz backup com o pg_dump, dá pra escolher vários formatos. Alguns funcionam com o pg_restore, outros não.
| Formato do backup | Descrição | Suportado pelo pg_restore |
|---|---|---|
plain (texto) |
Script SQL com os comandos de restauração. | ❌ Não |
custom |
Backup compactado no formato proprietário do PostgreSQL. | ✅ Sim |
directory |
Backup salvo como uma pasta com vários arquivos. | ✅ Sim |
tar |
Arquivo no formato TAR. | ✅ Sim |
Repara que pra backups em texto (plain) você não pode usar o pg_restore. Esses arquivos você restaura na mão com o comando psql. Tipo assim:
psql -U nome_usuario -d nome_banco -f backup.sql
Flexibilidade do pg_restore: parâmetros de restauração
Um dos motivos do pg_restore ser tão querido é a flexibilidade. Dá pra restaurar o banco inteiro ou só partes específicas.
Restaurar só a estrutura dos dados. Se você quiser restaurar só a estrutura do banco (schemas de tabelas, índices, triggers e tal), usa o flag --schema-only:
pg_restore -U postgres -d university --schema-only backup.dump
Isso é útil se você quiser analisar a estrutura do banco ou criar uma cópia "vazia".
Restaurar só os dados. Se o que interessa são só os dados (sem a estrutura), usa o parâmetro --data-only:
pg_restore -U postgres -d university --data-only backup.dump
Esse jeito é bom quando a estrutura já existe, mas você precisa trazer o conteúdo das tabelas de volta.
Limpar antes de restaurar. Às vezes as tabelas ou schemas já existem no banco. Pra apagar eles antes de restaurar, usa o flag --clean:
pg_restore -U postgres -d university --clean backup.dump
Com esse parâmetro, o pg_restore apaga os objetos que já existem e depois restaura tudo do backup.
Filtrar objetos. O pg_restore deixa você escolher quais objetos do backup quer restaurar. Pra isso, usa o flag --table:
pg_restore -U postgres -d university --table=students backup.dump
Nesse exemplo, só a tabela students vai ser restaurada.
Mostrar o SQL no console
Se você quiser ver o que vai ser executado na restauração, mas sem mexer no banco ainda, usa o flag --list:
pg_restore -l backup.dump
E pra ver os comandos SQL em texto que vão rodar, adiciona o --verbose:
pg_restore -U postgres --verbose --schema-only backup.dump
Exemplos de restauração
- Restauração completa do banco de dados.
O cenário mais comum: você quer restaurar o banco inteiro do backup:
pg_restore -U postgres -d university backup.dump
- Restauração de uma tabela específica.
Por exemplo, se você perdeu só os dados da tabela courses, restaura só ela:
pg_restore -U postgres -d university --table=courses backup.dump
- Restauração do schema do banco.
Pra restaurar só a estrutura das tabelas (sem os dados):
pg_restore -U postgres -d university --schema-only backup.dump
- Restauração recriando os objetos.
Se você precisa sobrescrever os dados que já existem:
pg_restore -U postgres -d university --clean backup.dump
Erros comuns na restauração e como evitar
Incompatibilidade de versões. Se você faz backup numa versão do PostgreSQL e tenta restaurar em outra (principalmente se for mais antiga), pode rolar erro de incompatibilidade. Solução: tenta usar a mesma versão do PostgreSQL pra criar e restaurar os backups.
Erro "Role does not exist". Se o backup usa roles (usuários) que não existem no servidor de destino, vai dar esse erro. Solução: cria as roles necessárias no novo servidor antes de restaurar.
Erro "Table already exists". Esse erro aparece se você tenta restaurar uma tabela que já existe. Usa o
--cleanpra evitar esse conflito.
GO TO FULL VERSION