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

148

Я просто обновился до postgres 10.2 на mac os, который соответствует 10.2 на героку. Я пытаюсь загрузить копию базы данных и восстановить ее локально. Перед обновлением восстановление будет работать нормально.

я бегу

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

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

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

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

Теги:
heroku

12 ответов

168
Лучший ответ

Вам нужно обновить локальные 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 (с применением патча).

  • 84
    brew upgrade postgresql brew postgresql-upgrade-database
  • 2
    Используя Linux Mint, моя версия 9.5.11, и она говорит, что она актуальна. Как заставить его использовать последнюю версию с помощью apt-get?
Показать ещё 8 комментариев
17

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

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

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

12

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

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

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

  • 0
    Обновление PostgreSQL работало и для меня.
11

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

$ rails db:drop
$ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>
  • 0
    heroku pg:pull обходной путь, я не знал про heroku pg:pull . Но это не подходящее решение, так как вы все еще не можете локально восстановить предыдущий дамп heroku, также я думаю, что при извлечении используется ресурс живой базы данных.
  • 0
    Не уверен, для чего нужны отрицательные голоса. ОП буквально спрашивает: «Я пытаюсь загрузить копию базы данных и восстановить ее локально», и я отвечаю на этот конкретный вопрос.
7

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

  • 0
    Мне не нужно было обновлять мой доморощенный PostgreSQL. Достаточно было обновить только Postgres.app до последней версии.
  • 0
    обновление из postgres.app исправило мою проблему
5

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

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

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

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

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

  • 0
    Я рекомендую обновить базу данных, так как это исправление безопасности, которое очень важно, если ваша база данных выполняет запросы от ненадежных пользователей: wiki.postgresql.org/wiki/… "Целью выпуска было обращение к CVE-2018-1058, в котором описывается как пользователь может создавать объекты с одинаковыми именами в разных схемах, которые могут изменить поведение запросов других пользователей и вызвать неожиданное или злонамеренное поведение, также известное как атака «троянским конем».
  • 0
    Я не могу Unable to locate package postgresql-client-10 когда я делаю это
Показать ещё 2 комментария
3

Была ли эта проблема в 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

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

Вот как я решил проблему на 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 указывает на правильную версию, и команда проходит

Подробная информация приведена здесь: https://serverfault.com/questions/610777/wrong-version-of-pg-dump-on-ubuntu

0

Вы используете старую версию двоичного файла 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 локально, и это устранило проблему для меня.

-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 теперь я верю.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню