Obtendo “[archiver] versão não suportada (1.13) no cabeçalho do arquivo” ao executar o pg_restore

165

Acabei de atualizar para o postgres 10.2 no mac os que corresponde a 10.2 no heroku. Estou tentando baixar uma cópia do banco de dados e restaurá-lo localmente. Antes da atualização, a restauração funcionaria bem.

eu corro

pg_restore --verbose --clean --no-acl --no-owner -h localhost -d database_name backup.dump

mas estou recebendo este erro:

pg_restore: [archiver] versão não suportada (1.13) no cabeçalho do arquivo

O banco de dados parece estar funcionando bem. É um aplicativo de trilhos e atualizei as pg gems. Eu posso correr rake db:createe db:migratemuito bem.

Mark Swardstrom
fonte

Respostas:

196

Você precisa atualizar o postgres local para obter o último patch de segurança a partir de 01/03/2018, como Herokuocorreu na primeira marcha. Você precisa de um dos últimos lançamentos 10.3, 9.6.8, 9.5.12, 9.4.17, e 9.3.22.

O patch de segurança pode ser encontrado aqui https://www.postgresql.org/about/news/1834/ .

Parece que o patch modificou o pg_dump, provavelmente é por isso que não podemos mais usar o pg_restore sem esse patch para o dump do Heroku (com o patch aplicado).

jumichot
fonte
87
brew upgrade postgresql brew postgresql-upgrade-database
gerry3
2
Usando o Linux Mint, minha versão é 9.5.11 e diz que está atualizada. Como forçá-lo a usar a versão mais recente usando o apt-get?
Kritz
Postgresql 9.5.12 está agora no oficial Ubuntu 16.04 repo hospitaleiro packages.ubuntu.com/xenial/postgresql-9.5
HarlemSquirrel
6
O comentário de @ gerry3 são dois comandos separados. Cuidado com copiar e usar!
Joe Masilotti 8/18
4
heads-up os dois comandos brew upgrade postgresql && brew postgresql-upgrade-databaserealmente corrigem o problema, mas meus bancos de dados locais foram descartados ao longo do caminho. Faça backup deles se você tiver dados críticos!
Jarvis Johnson
19

Corri para o mesmo problema hoje, não sei se algo mudou do lado do Heroku, porque localmente estou executando a 9.6, mas meu banco de dados no Heroku é 9,4, então não parecia ser a diferença de ponto de versão (ela estava trabalhando até hoje.)

Se você estiver usando o Postgres.app ( https://postgresapp.com/ ) em um Mac, verifique se está executando v2.1.3(no momento em que este artigo é a versão mais recente). Quando você atualiza o Postgres.app, obtém a versão mais recente do patch do Postgres (o que provavelmente está causando a incompatibilidade que você está enfrentando atualmente - o Heroku atualizou o último patch de segurança e a máquina local pode não o ter).

Eu tive que atualizar o Postgres.app de 2.1.0 para 2.1.3 e ele resolveu o problema.

Canuk
fonte
12

Desde ontem (01/03/2018), também tivemos problemas para restaurar um backup do Heroku em execução no PostgreSQL 9.5:

pg_restore: [archiver] unsupported version (1.13) in file header

A atualização da versão do PostgreSQL de 9.5.11 para 9.5.12 corrigiu o problema.

cbx
fonte
12

Na primeira vez que tive esse problema, veja como restaurei o banco de dados Heroku no meu local:

$ rails db:drop
$ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>
Jim Padilla
fonte
Solução legal, eu não sabia heroku pg:pull. Mas essa não é uma correção adequada, pois você ainda não pode restaurar localmente um dump heroku anterior, também acho que isso utiliza o recurso de banco de dados ao vivo enquanto puxa.
demental
1
Não sei para que servem os votos negativos. O OP está literalmente perguntando "Estou tentando baixar uma cópia do banco de dados e restaurá-lo localmente" e estou respondendo a essa pergunta específica.
Jim Padilla
7

Para aqueles que estão tentando atualizar o postgresql no Ubuntu sem sucesso (como o comentado por Johan acima), tente usar o repositório apt do PostgreSQL, conforme indicado nas instruções oficiais de download do PostgreSQL: https://www.postgresql.org/download/linux/ubuntu /

deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
Diego Aragão
fonte
6

A correção para mim envolveu tanto atualização do meu Postgres.app e a atualização do meu homebrew local PostgreSQL.

Atualize meu Postgres.app através da resposta do Canuk:

Abra Postgres.app> Verifique se há atualizações ...

Atualize o PostgreSQL do meu homebrew local através do comentário de gerry3 na resposta aceita:

brew upgrade postgresql brew postgresql-upgrade-database

alxpck
fonte
Não precisei atualizar meu PostgreSQL, do homebrew. Somente a atualização do Postgres.app para a versão mais recente foi suficiente.
Mineralwasser
A atualização do postgres.app corrigiu o meu problema.
FutoRicky 18/10
6

Teve este problema no Windows usando o pgAdmin 3.

A atualização do pgAdmin 3 para o pgAdmin 4 resolveu o problema para mim.

Se você estiver usando uma ferramenta de terceiros, como o PgAdmin, para restaurar o arquivo de despejo fornecido, a restauração poderá não ser bem-sucedida, mesmo com a versão instalada do Postgres atualizada. Isso ocorre porque ferramentas de terceiros geralmente agrupam suas próprias versões do binário pg_restore, que podem não estar atualizadas. https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore

Andrew
fonte
Obrigado, isso funcionou para mim. Estou no PostgreSQL 9.5.12 e estava usando o pgAdmin 3. O pgAdmin 4 foi capaz de executar com pg_restoreêxito.
27418 Alexander Alexander
5

Não recomendo atualizar seu banco de dados para uma nova versão principal localmente (aplique patches de segurança) apenas para corrigir isso, pois você deseja que ele corresponda à versão que você tem em produção.

Isso o corrigiu no Ubuntu 16.04, restaurando a partir de um banco de dados Heroku.

Primeiro, verifique se você possui o repositório postgresql como diego mencionado. Em seguida, instale o cliente atualizado.

sudo apt-get update && sudo apt-get install postgresql-client-10

Se você é Ubuntu 17.04 ou 17.10, observe que o repositório zesty do PostgreSQL não possui os clientes atualizados que você precisa. Você deseja usar o repositório xenial do Postgres.

Ivan
fonte
Eu recomendo atualizar o db, pois é um patch de segurança que é muito importante se o banco de dados executar consultas de usuários não confiáveis: wiki.postgresql.org/wiki/… "O objetivo do release era abordar o CVE-2018-1058, que descreve como um usuário pode criar objetos com nomes semelhantes em diferentes esquemas que podem alterar o comportamento das consultas de outros usuários e causar um comportamento inesperado ou mal-intencionado, também conhecido como ataque "cavalo de tróia".
22418 RobM
Eu recebo Unable to locate package postgresql-client-10quando faço isso #
Doug
@RobM Concordou. Por "não recomendo atualizar ...", eu estava me referindo a não atualizar para uma versão principal que você não está usando na produção. Certamente, é recomendável atualizar para o patch de segurança mais recente em uma versão principal localmente e em produção, é claro. Ajustarei o palavreado na minha resposta para refletir melhor meu significado.
315 Ivan Ivan
1
@ Doug Não se esqueça de adicionar primeiro o repositório postgres apropriado. Semelhante ao descrito neste comentário. stackoverflow.com/a/49116272/3975541
Ivan
4

Aqui está como eu resolvi o problema no Ubuntu (16.04 LTS), em que o pg_restore / pg_dump me deu uma versão mais antiga, do psql

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8

$ psql --version
psql (PostgreSQL) 9.5.14

O problema é que tenho várias versões de pg instaladas e o pg_restore estava apontando para a versão anterior

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.5 main    5433 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log

A correção é criar um arquivo ~ / .postgresqlrc apontando para a versão correta

$ cat ~/.postgresqlrc

9.5 main *

Feito isso, o pg_restore aponta para a versão correta e o comando segue

Detalhes fornecidos aqui: /server/610777/wrong-version-of-pg-dump-on-ubuntu

Rabi Cherian
fonte
3

Encontrei esse problema no pgadmin III e consegui corrigi-lo alternando a localização dos binários:

Menu Arquivo> Opções> Caminhos binários e alterou "PG bin path" para postgresql / 9.x / bin em vez de ProgramFiles / pgadmin. Restaurar funcionou bem depois.

op op opself
fonte
2

Você está usando uma versão antiga do binário pg_restore que não suporta a restauração do arquivo de despejo fornecido. Certifique-se de usar a versão mais recente do Postgres, que deve ser maior que a seguinte versão: https://www.postgresql.org/about/news/1834/ (10.3, 9.6.8, 9.5.12, 9.4.17 e 9.3.22).

Você pode verificar a versão do pg_restore que está usando executando o pg_restore --version.

Se você estiver usando uma ferramenta de terceiros, como o PgAdmin, para restaurar o arquivo de despejo fornecido, a restauração poderá não ter êxito, mesmo com a versão instalada do Postgres atualizada. Isso ocorre porque ferramentas de terceiros geralmente agrupam suas próprias versões do binário pg_restore, que podem não estar atualizadas.

Vagner Dev
fonte
0

Eu estava encontrando o mesmo erro. Atualizei para o postgresql 10.3 localmente e isso resolveu o problema para mim.

Sean McCleary
fonte
-1

Para Windows:

Abra o prompt de comando ( cmd), vá para o local C:\Program Files\PostgreSQL\9.6\bine execute estes comandos:

pg_restore -U username -d dbname -1 filename.dump
pg_restore -U postgres -d app -1 G:\app09-07-2019.backup

Espero que ajude você

Reena khan
fonte
-3

Corri no mesmo problema há 10 minutos e descobri esse segmento de 2005: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

Basicamente, o cara está dizendo que o arquivo de despejo está corrompido.

nfilzi
fonte
3
Estranho. Criei um arquivo de despejo a partir do heroku e obtive o mesmo problema. Isso nunca aconteceu antes. Tentei atualizar o postgresql de 9.6 para 10, mas não funcionou.
karantan
1
Você está no 10.2 ou 10.3? Você tem que estar no 10.3 agora eu acredito.
Jack Kinsella
Esse segmento da lista de discussão é de 2005. Há algo recentemente alterado acontecendo aqui que é diferente do problema nesse segmento.
precisa saber é o seguinte