Estou usando o PostgreSQL 9.1 e quero restaurar os arquivos de backup gerados com pg_dump
:
sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name
Este comando gera um arquivo sql válido que começa com a eliminação de quaisquer objetos de banco de dados existentes, em seguida, gera todas as tabelas, indiizes, sequências e assim por diante e, finalmente, insere os dados.
Quando tento restaurar o arquivo de backup gerado com: (quebras de linha adicionadas apenas para fins de exibição)
sudo pg_restore
-d database_name -h 127.0.0.1 -U postgres
--format=c --clean --create out.sql
ele falha e imprime:
pg_restore: [archiver] did not find magic string in file header
Qual é a razão disso?
Você está restaurando com ,
pg_restore --format=c ...
maspg_dump
não foi feito com--format=c
, foi feito com o formato padrão simples .Da página de
pg_dump
manual:Um dump em formato simples deve ser alimentado diretamente na
psql
ferramenta de linha de comando,pg_restore
não sabe o que é, que é o motivo desta mensagem de erro: não encontrou a string mágica no cabeçalho do arquivo .Você pode olhar diretamente para o arquivo de despejo com o
more out.sql
shell e verá comandos SQL legíveis. Restaure-o compsql -f out.sql [other options]
. Você provavelmente desejará criar primeiro o banco de dados de destino, pois a--create
opção não está presente napg_dump
chamada.Por outro lado, você pode invocar novamente o dump adicionando
--format=c
suas opções. Então seria o contrário:pg_restore
deve ser usado para interpretar um arquivo de despejo no formato personalizado.Um possível problema é que seu arquivo de dados está truncado. Verifique se você está baixando o arquivo completo comparando os tamanhos dos arquivos.
Se você usar git-lfs, certifique-se de ter o arquivo real, não o ponteiro!