Получение «[archiver] неподдерживаемой версии (1.13) в заголовке файла» при запуске pg_restore


165

Я только что обновился до Postgres 10.2 на Mac OS, который соответствует 10.2 на Heroku. Я пытаюсь скачать копию базы данных и восстановить ее локально. До обновления восстановление работало бы нормально.

я бегу

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

но я получаю эту ошибку:

pg_restore: [архиватор] неподдерживаемая версия (1.13) в заголовке файла

База данных работает нормально. Это приложение rails, и я обновил pg gems. Я могу бежать rake db:createи db:migrateпросто отлично.

Ответы:


196

Вам нужно обновить локальный postgres, чтобы получить последний патч безопасности от 2018-03-01, как Herokuэто было в 1-м марше. Вам нужно один из последних релизов 10.3, 9.6.8, 9.5.12, 9.4.17, и 9.3.22.

Патч безопасности можно найти здесь https://www.postgresql.org/about/news/1834/ .

Кажется, патч изменил pg_dump, поэтому, вероятно, мы больше не сможем использовать pg_restore без этого патча для дампа Heroku (с примененным патчем).


87
brew upgrade postgresql brew postgresql-upgrade-database
gerry3

2
Используя Linux Mint, моя версия 9.5.11, и она говорит, что она актуальна. Как заставить его использовать последнюю версию с помощью apt-get?
Kritz

Postgresql 9.5.12 теперь находится в официальном репозитории Ubuntu 16.04 xenial packages.ubuntu.com/xenial/postgresql-9.5
HarlemSquirrel

6
Комментарий @ gerry3 - это две отдельные команды. Остерегайтесь копировщиков!
Джо Масилотти

4
heads две команды brew upgrade postgresql && brew postgresql-upgrade-databaseдействительно решают проблему, но мои локальные базы данных были сброшены по пути. Сделайте резервную копию, если у вас есть важные данные!
Джарвис Джонсон

19

Я столкнулся с этой же проблемой сегодня, я не знаю, изменилось ли что-то на стороне Heroku, потому что локально я использую 9.6, но моя база данных на Heroku - 9.4, так что, похоже, она не о разнице в точках версии ( работал до сегодняшнего дня.)

Если вы используете Postgres.app ( https://postgresapp.com/ ) на Mac, убедитесь, что вы работаете v2.1.3(на момент написания этой статьи это самая новая версия). При обновлении Postgres.app вы получаете новейший выпуск исправлений Postgres (что, вероятно, вызывает несоответствие, которое вы испытываете в настоящее время - Heroku обновил систему до последнего исправления безопасности, и на вашем локальном компьютере его может не быть).

Мне пришлось обновить Postgres.app с 2.1.0 до 2.1.3, и это решило проблему.


12

Со вчерашнего дня (01/01/2018) у нас также были проблемы с восстановлением резервной копии из Heroku, работающей на PostgreSQL 9.5:

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

Обновление нашей версии PostgreSQL с 9.5.11 до 9.5.12 устранило проблему.


12

Когда я впервые столкнулся с этой проблемой, вот как я восстановил базу данных Heroku в своем Local:

$ rails db:drop
$ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>

Хороший обходной путь, я не знал о heroku pg:pull. Но это не подходящее решение, так как вы все еще не можете локально восстановить предыдущий дамп heroku, также я думаю, что при извлечении используется ресурс живой базы данных.
Demental

1
Не уверен, для чего нужны отрицательные голоса. ОП буквально спрашивает: «Я пытаюсь загрузить копию базы данных и восстановить ее локально», и я отвечаю на этот конкретный вопрос.
Джим Падилья

7

Для тех, кто пытается безуспешно обновить postgresql в Ubuntu (как прокомментировал Йохан выше), попробуйте использовать репозиторий PostgreSQL apt, как указано в официальных инструкциях по загрузке 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

6

Исправление для меня включало в себя как обновление моего Postgres.app, так и обновление моего локального доморощенного PostgreSQL.

Обновите мой Postgres.app через ответ Canuk:

Откройте Postgres.app> Проверьте наличие обновлений ...

Обновите мой локальный доморощенный PostgreSQL через комментарий gerry3 о принятом ответе:

brew upgrade postgresql brew postgresql-upgrade-database


Мне не пришлось обновлять мой доморощенный PostgreSQL. Достаточно было обновить только Postgres.app до последней версии.
minewasser

обновление из postgres.app исправило мою проблему
FutoRicky

6

Была эта проблема на Windows с помощью pgAdmin 3.

Обновление с pgAdmin 3 до pgAdmin 4 решило проблему для меня.

Если вы используете сторонний инструмент, такой как PgAdmin, для восстановления предоставленного файла дампа, восстановление может не завершиться успешно, даже если установленная версия Postgres обновлена. Это связано с тем, что сторонние инструменты часто связывают свои собственные версии двоичного файла pg_restore, которые могут быть устаревшими. https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore


Спасибо, это сработало для меня. Я на PostgreSQL 9.5.12, и я использовал pgAdmin 3. pgAdmin 4 смог pg_restoreуспешно работать .
Александр

5

Я не рекомендую обновлять вашу БД до новой основной версии локально (применяйте исправления безопасности) просто для того, чтобы исправить это так, как вы хотите, чтобы оно соответствовало любой версии, имеющейся у вас в производстве.

Это исправлено в Ubuntu 16.04, восстановление из базы данных Heroku.

Во-первых, убедитесь, что у вас есть репозиторий postgresql, о котором говорил Диего. Затем установите обновленный клиент.

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

Если вы Ubuntu 17,04 или 17,10, обратите внимание , что пикантный репо в PostgreSQL это не имеет обновленный клиент Вам необходимо. Вы захотите использовать Xenial Postgres репо.


Я рекомендую обновить базу данных, так как это исправление безопасности, которое очень важно, если ваша база данных выполняет запросы от ненадежных пользователей: wiki.postgresql.org/wiki/… "Целью выпуска было обращение к CVE-2018-1058, который описывает как пользователь может создавать объекты с одинаковыми именами в разных схемах, которые могут изменить поведение запросов других пользователей и вызвать неожиданное или злонамеренное поведение, также известное как атака «троянским конем».
RobM

Я получаю, Unable to locate package postgresql-client-10когда я делаю это
Даг

@RobM Согласен. Под «не рекомендовать обновление ...» я имел в виду не обновлять до основной версии, которую вы не используете в производстве. Конечно, целесообразно обновить до новейшего исправления безопасности в основной версии локально и, конечно же, на производстве. Я подправлю словоблудие в своем ответе, чтобы лучше отразить мое значение.
Иван

1
@Doug Не забудьте сначала добавить соответствующий репозиторий Postgres. Подобно тому, что описано в этом комментарии. stackoverflow.com/a/49116272/3975541
Иван

4

Вот как я решил проблему в Ubuntu (16.04 LTS), где pg_restore / pg_dump дал мне более старую версию из psql

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8

$ psql --version
psql (PostgreSQL) 9.5.14

Проблема в том, что у меня установлено несколько версий pg, а pg_restore указывал на более раннюю версию

$ 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

Исправление заключается в создании файла ~ / .postgresqlrc, указывающего на правильную версию

$ cat ~/.postgresqlrc

9.5 main *

Как только это будет сделано, pg_restore указывает на правильную версию, и команда проходит

Подробности приведены здесь: /server/610777/wrong-version-of-pg-dump-on-ubuntu


3

Я столкнулся с этой проблемой на pgadmin III и смог ее исправить, переключив расположение двоичных файлов:

Меню Файл> Параметры> Двоичные пути, затем изменил «PG bin path» на postgresql / 9.x / bin вместо ProgramFiles / pgadmin. Восстановление работало нормально после этого.


2

Вы используете старую версию двоичного файла pg_restore, которая не поддерживает восстановление предоставленного файла дампа. Убедитесь, что вы используете последнюю версию Postgres, которая должна быть выше следующей версии: https://www.postgresql.org/about/news/1834/ (10.3, 9.6.8, 9.5.12, 9.4.17 и 9.3.22).

Вы можете проверить версию pg_restore, которую вы используете, запустив pg_restore --version.

Если вы используете сторонний инструмент, такой как PgAdmin, для восстановления предоставленного файла дампа, восстановление может не завершиться успешно, даже если установленная версия Postgres обновлена. Это связано с тем, что сторонние инструменты часто связывают свои собственные версии двоичного файла pg_restore, которые могут быть устаревшими.


0

Я столкнулся с той же ошибкой. Я обновился до postgresql 10.3 локально, и это решило проблему для меня.


-1

Для Windows:

Откройте командную строку ( cmd), затем перейдите в расположение C:\Program Files\PostgreSQL\9.6\binи выполните следующие команды:

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

Надеюсь, это поможет вам


-3

Я запустил ту же проблему 10 минут назад и узнал об этой теме с 2005 года: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

В основном парень говорит, что файл дампа поврежден.


3
Странный. Я создал файл дампа из heroku, и я получил ту же проблему. Это никогда не случалось раньше. Я попытался обновить postgresql с 9.6 до 10, но это не сработало.
Карантан

1
Вы на 10,2 или 10,3? Вы должны быть на 10,3 теперь я верю.
Джек Кинселла

Этот список рассылки относится к 2005 году. Здесь недавно произошло что-то новое, что отличается от проблемы в этой теме.
Yetanotherjosh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.