pg_dump e pg_restore: arquivo de entrada não parece ser um arquivo válido

62

Eu usei o pg_dump em uma máquina e copiei o arquivo de resultados para outro, onde tentei restaurá-lo. Eu acredito que o esquema é o mesmo. No entanto, recebo:

pg_restore: [archiver] input file does not appear to be a valid archive

Eu fiz as seguintes operações:

pg_dump -a -f db.txt dbname

e:

pg_restore -a -d dbname db.txt

O que pode estar errado?

    
por gruszczy 14.06.2010 / 18:15

8 respostas

88

Você está descarregando no formato sql simples que foi projetado para alimentar o psql. Isso não é reconhecido pelo pg_restore.

cat db.txt | psql dbname

deve fazer o truque

    
por 14.06.2010 / 18:26
24
Por padrão,

pg_dump cria os comandos sql necessários para recriar os dados. Para recuperá-lo, basta invocar psql (não pg_restore ) com o arquivo como entrada. pg_restore só deve ser usado para o formato binário (não padrão e menos comum não recomendado ) de pg_dump . Leia os documentos .

Atualização: os formatos binários pg_dump ( -Fc -Ft ) que devem ser usados com pg_restore estão ok e oferecem alguma flexibilidade extra. Mas eles são menos padrão (não SQL), menos aptos a importar de algumas ferramentas (por exemplo, um frontend php) ou manipular com um editor de texto, e um pouco menos portável para outras versões e até mesmo outros bancos de dados. Para backups, eu ficaria com o formato simples padrão. Para outros cenários, a opção binária + pg_restore pode ser igualmente ou mais adequada.

O ponto a manter é que no Postgresql, no cenário típico , o backup normalmente é feito por pg_dump (simples) e a restauração com o cliente da linha de comando padrão ( psql ).

    
por 14.06.2010 / 18:22
12

Tente passar a opção --format=c para pg_dump . Isso permitirá que pg_restore o restaure.

    
por 14.06.2010 / 18:23
4

Isso é o que eu faria para fazer backup do meu banco de dados antigo e restaurar

Para fazer backup do seu banco de dados

pg_dump --format=c olddb_name > db_dump_file.dump

Para restaurar esse backup

pg_restore -v -d newdb_name db_dump_file.dump

Leia mais em pg_dump e pg_restore

    
por 27.02.2014 / 10:03
3

Para usuários do Windows, tente

type db.txt | psql --username="YOURNAME" dbname

Funciona como um charme

    
por 15.04.2011 / 19:59
1

Você pode fazer algo com o comando SOURCE do MySQL:

psql dbname

Então, no terminal postgresql:

\i filename
    
por 03.01.2014 / 11:49
0

cat dumpFileName | psql -h ip -d nome_do_bd -U nome_do_usuário -W

    
por 11.04.2014 / 09:06
0

Essa mensagem de erro também pode significar que realmente há algo errado com o arquivo de backup (ou suas suposições sobre isso).

Em um caso, eu tinha montado um arquivo de backup em um contêiner do Docker e tentei restaurá-lo, mas ele falhou com does not appear to be a valid archive . E, de fato, o arquivo estava vazio, porque a montagem não foi realizada corretamente.

    
por 20.02.2017 / 16:54