pg_restore: [archiver] não encontrou uma sequência mágica no cabeçalho do arquivo

13

Estou usando o PostgreSQL 9.1 e quero restaurar 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 remoção de qualquer objeto de banco de dados existente, gera todas as tabelas, indizes, sequências e assim por diante e, finalmente, insere 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

falha e imprime:

pg_restore: [archiver] did not find magic string in file header

Qual a razão disso?

maja
fonte

Respostas:

19

Você está restaurando, pg_restore --format=c ...mas o pg_dumpnão foi concluído --format=c, foi feito com o formato simples e padrão.

Da página de pg_dumpmanual:

  -F format, --format=format
       Selects the format of the output.  format can be one of the
       following:

       p, plain
           Output a plain-text SQL script file (the default).

Um despejo em formato simples deve ser alimentado diretamente na psqlferramenta de linha de comando, pg_restorenão sabe o que é, e é esse o motivo dessa mensagem de erro: não foi encontrada uma seqüência mágica no cabeçalho do arquivo .

Você pode olhar diretamente para o arquivo de despejo com more out.sqlno shell e verá comandos SQL legíveis. Restaure-o com psql -f out.sql [other options]. Você provavelmente desejará criar o banco de dados de destino primeiro, pois a --createopção não está presente na pg_dumpchamada.

Por outro lado, você pode reinvocar o dump adicionando --format=càs suas opções. Então isso seria o oposto: pg_restoredeve ser usado para interpretar um arquivo de despejo no formato personalizado.

Daniel Vérité
fonte
0

Um possível problema é que seu arquivo de dados está truncado. Verifique se você está baixando o arquivo completo comparando os tamanhos.

Sterling Cobb
fonte
0

Se você usa git-lfs, certifique-se de ter o arquivo real, não o ponteiro!

mehmet
fonte