Eu usei pg_dump em uma máquina e copiei o arquivo de resultado para outra, onde tentei restaurá-lo. Acredito que o esquema seja o mesmo. No entanto, recebo:
pg_restore: [archiver] input file does not appear to be a valid archive
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?
Você está despejando no formato SQL simples que foi projetado para alimentar arquivos
psql
. Isso não é reconhecido pelopg_restore
.Deve fazer o truque
pg_dump
por padrão cria os comandos sql necessários para recriar os dados. Para recuperá-lo, basta invocarpsql
(nãopg_restore
) com o arquivo como entrada .pg_restore
deve ser usado apenas para o formato binário (não padrão, e menos usualnão recomendado) depg_dump
. Leia os documentos .Atualização: Os
pg_dump
formatos binários (-Fc
-Ft
) que devem ser usadospg_restore
estão corretos e oferecem alguma flexibilidade extra. Mas eles são menos padrão (não SQL), menos aptos para importar de algumas ferramentas (por exemplo, um frontend php) ou manipular com um editor de texto, e um pouco menos portáteis para outras versões e até outros bancos de dados. Para backups, eu ficaria com o formato simples padrão. Para outros cenários, a opção binary + pg_restore pode ser igualmente ou mais adequada.O ponto a se manter é que no Postgresql, no cenário típico , o backup normalmente é feito pelo pg_dump (simples) e a restauração com o cliente de linha de comando padrão ( psql ).
Tente passar a
--format=c
opção parapg_dump
. Isso permitirápg_restore
restaurá-lo.Isto é o que eu faria para fazer backup do meu banco de dados antigo e restaurar
Para fazer backup do seu banco de dados
Para restaurar esse backup
Leia mais em pg_dump e pg_restore
Para usuários do Windows tente
Funciona como um encanto
Você pode fazer algo com o
SOURCE
comando do MySQL:Então, no terminal postgresql:
cat dumpFileName | psql -h ip -d dbName -U userName -W
Essa mensagem de erro também pode significar que há realmente algo errado com o arquivo de backup (ou suas suposições sobre ele).
Em um caso, montei um arquivo de backup em um contêiner do Docker e tentei restaurar, mas falhou com o
does not appear to be a valid archive
. E, de fato, o arquivo estava vazio, pois a montagem não foi realizada corretamente.Se estiver no Windows, chame o
psql
cliente do Postgres, no shell, com os parâmetros conforme abaixo:Exemplo: