Отримання «[архіватора] непідтримуваної версії (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) у заголовку файлу

Здається, база даних працює нормально. Це додаток для рейкових дорог, і я оновив дорогоцінні камені на pg. Я можу бігати rake db:createі db:migrateпросто добре.

Відповіді:


196

Потрібно оновити локальні поштові повідомлення, щоб отримати останній виправлення безпеки з 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?
Криц

Postgresql 9.5.12 тепер в офіційному репо Ubuntu дружній 16.04 packages.ubuntu.com/xenial/postgresql-9.5
HarlemSquirrel

6
@ gerry3 - це дві окремі команди. Обережно копіюйте і вставляйте!
Джо Масілотті

4
заголовки двох команд 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.03.2018) у нас також виникли проблеми з відновленням резервної копії з Heroku, що працює на PostgreSQL 9.5:

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

Оновлення нашої версії PostgreSQL з 9.5.11 до 9.5.12 виправило проблему.


12

Перший раз у мене виникло це питання, ось як я відновив базу даних Heroku в моєму локальному:

$ 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, як зазначено в офіційній інструкції щодо завантаження 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 до останньої версії.
мінеральний відбірник

оновлення з 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 repo, як згадується diego. Потім встановіть оновлений клієнт.

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

Якщо ви Ubuntu 17,04 або 17,10, зверніть увагу , що пікантний репо в PostgreSQL це НЕ має оновлений клієнт Вам необхідно. Ви захочете використовувати замість xenial Postgres repo.


Я рекомендую оновити db, оскільки це патч безпеки, що є досить важливим, якщо ваша база даних виконує запити від недовірених користувачів: wiki.postgresql.org/wiki/… "Метою випуску було звернення до CVE-2018-1058, де описано як користувач може створювати об'єкти з назвою назви в різних схемах, які можуть змінювати поведінку запитів інших користувачів і викликати несподівану чи зловмисну ​​поведінку, також відому як "атака" троянських коней ".
RobM

Я отримую, Unable to locate package postgresql-client-10коли я це роблю
Дуг

@RobM Погодився. Під "не рекомендую оновлення ..." я мав на увазі не модернізацію до основної версії, яку ви не використовуєте у виробництві. Безумовно, розумно оновити до останнього виправлення безпеки в основній версії локально, і на виробництві, звичайно. Я дороблю багатослівність у своїй відповіді, щоб краще відобразити мій сенс.
Іван

1
@Doug Не забудьте спочатку додати відповідне репо постгреси. Аналогічно тому, що описано в цьому коментарі. 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 шлях бін" на 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 року. Тут нещодавно змінилося, що відрізняється від проблеми в цій темі.
Єтатернотеош
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.