CodeGym /Cursos /SQL SELF /Restauração de dados com pg_restore

Restauração de dados com pg_restore

SQL SELF
Nível 43, Lição 3
Disponível

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 o pg_dump no formato custom ou directory

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

  1. 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
  1. 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
  1. 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
  1. 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 --clean pra evitar esse conflito.

2
Tarefa
SQL SELF, nível 43, lição 3
Bloqueado
Restauração de dados de apenas uma tabela
Restauração de dados de apenas uma tabela
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION