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
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?
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 ).
Tente passar a opção --format=c
para pg_dump
. Isso permitirá que pg_restore
o restaure.
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
Para usuários do Windows, tente
type db.txt | psql --username="YOURNAME" dbname
Funciona como um charme
Você pode fazer algo com o comando SOURCE
do MySQL:
psql dbname
Então, no terminal postgresql:
\i filename
cat dumpFileName | psql -h ip -d nome_do_bd -U nome_do_usuário -W
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.