Pobieranie „[archiwizator] nieobsługiwanej wersji (1.13) w nagłówku pliku” podczas uruchamiania pg_restore

165

Właśnie zaktualizowałem do Postgres 10.2 na Mac OS, który pasuje do 10.2 na Heroku. Próbuję pobrać kopię bazy danych i przywrócić ją lokalnie. Przed aktualizacją przywrócenie będzie działać dobrze.

biegnę

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

ale otrzymuję ten błąd:

pg_restore: [archiwizator] nieobsługiwana wersja (1.13) w nagłówku pliku

Baza danych wydaje się działać poprawnie. Jest to aplikacja rails, a ja zaktualizowałem pg gems. Mogę biegać rake db:createi db:migratepo prostu dobrze.

Mark Swardstrom
źródło

Odpowiedzi:

196

Musisz zaktualizować lokalne postgres, aby pobrać ostatnią poprawkę bezpieczeństwa z 2018-03-01, podobnie Herokujak 1 marca. W przeglądarce musi być jednym z ostatnich wydań 10.3, 9.6.8, 9.5.12, 9.4.17, i 9.3.22.

Poprawkę bezpieczeństwa można znaleźć tutaj https://www.postgresql.org/about/news/1834/ .

Wygląda na to, że łatka zmodyfikowała pg_dump, prawdopodobnie dlatego nie możemy już używać pg_restore bez tej łatki do zrzutu Heroku (z nałożoną łatką).

jumichot
źródło
87
brew upgrade postgresql brew postgresql-upgrade-database
gerry3
2
Używając Linux Mint, moja wersja to 9.5.11 i mówi, że jest aktualna. Jak zmusić go do używania najnowszej wersji za pomocą apt-get?
Kritz,
PostgreSQL 9.5.12 jest teraz w oficjalnym repo Ubuntu 16.04 xenial packages.ubuntu.com/xenial/postgresql-9.5
HarlemSquirrel
6
Komentarz @ gerry3 to dwa oddzielne polecenia. Strzeżcie się kopiujących i pasterów!
Joe Masilotti
4
na czele te dwie komendy brew upgrade postgresql && brew postgresql-upgrade-databaserzeczywiście rozwiązują problem, ale moje lokalne bazy danych zostały po drodze usunięte. Utwórz ich kopię zapasową, jeśli masz krytyczne dane!
Jarvis Johnson
19

Napotkałem ten sam problem dzisiaj, nie wiem, czy coś się zmieniło po stronie Heroku, ponieważ lokalnie używam 9.6, ale moja baza danych na Heroku to 9.4, więc nie wydawało się, że chodzi o różnicę punktów wersji (to działał do dziś).

Jeśli używasz Postgres.app ( https://postgresapp.com/ ) na komputerze Mac, upewnij się, że korzystasz v2.1.3(w chwili pisania tego tekstu jest to najnowsza wersja). Po uaktualnieniu Postgres.app otrzymujesz najnowszą wersję poprawki Postgres (co prawdopodobnie powoduje niezgodność, której obecnie doświadczasz - Heroku zaktualizowało do najnowszej poprawki bezpieczeństwa, a Twój lokalny komputer może jej nie mieć).

Musiałem zaktualizować Postgres.app z 2.1.0 do 2.1.3 i to rozwiązało problem.

Canuk
źródło
12

Od wczoraj (03.01.2018) mieliśmy również problemy z przywróceniem kopii zapasowej z Heroku działającej na PostgreSQL 9.5:

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

Aktualizacja naszej wersji PostgreSQL z 9.5.11 do 9.5.12 rozwiązała problem.

cbx
źródło
12

Gdy pierwszy raz miałem ten problem, oto jak przywróciłem bazę danych Heroku do mojego lokalnego:

$ rails db:drop
$ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>
Jim Padilla
źródło
Niezłe obejście, o którym nie wiedziałem heroku pg:pull. Ale to nie jest odpowiednia poprawka, ponieważ nadal nie można lokalnie przywrócić poprzedniego zrzutu heroku, również myślę, że podczas ściągania wykorzystuje on zasoby bazy danych na żywo.
demencjonalny
1
Nie jestem pewien, po co są głosy przeciw. OP pyta dosłownie „Próbuję pobrać kopię bazy danych i przywrócić ją lokalnie”, a ja odpowiadam na to konkretne pytanie.
Jim Padilla
7

Dla tych, którzy próbują zaktualizować postgresql w Ubuntu bez powodzenia (jak skomentował Johana powyżej), spróbuj użyć repozytorium apt PostgreSQL, zgodnie z oficjalnymi instrukcjami pobierania 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
źródło
6

Poprawka dla mnie obejmowała zarówno aktualizację mojego Postgres.app, jak i aktualizację mojego lokalnego homebrew PostgreSQL.

Zaktualizuj moją aplikację Postgres.app za pomocą odpowiedzi Canuk:

Otwórz Postgres.app> Sprawdź aktualizacje ...

Zaktualizuj mój lokalny homebrew PostgreSQL za pośrednictwem komentarza gerry3 dotyczącego zaakceptowanej odpowiedzi:

brew upgrade postgresql brew postgresql-upgrade-database

alxpck
źródło
Nie musiałem aktualizować mojego homebrew PostgreSQL. Wystarczy zaktualizować Postgres.app do najnowszej wersji.
mineralwasser
aktualizacja z postgres.app naprawiła mój problem
FutoRicky
6

Miałem ten problem w systemie Windows przy użyciu pgAdmin 3.

Aktualizacja z pgAdmin 3 do pgAdmin 4 rozwiązała problem za mnie.

Jeśli używasz narzędzia innej firmy, takiego jak PgAdmin, do przywrócenia dostarczonego pliku zrzutu, przywrócenie może się nie powieść, nawet jeśli zainstalowana wersja Postgres jest aktualna. Wynika to z tego, że narzędzia innych firm często łączą własne wersje pliku binarnego pg_restore, które mogą nie być aktualne. https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore

Andrzej
źródło
Dzięki, to zadziałało dla mnie. Korzystam z PostgreSQL 9.5.12 i korzystałem z pgAdmin 3. pgAdmin 4 działał pg_restorepomyślnie.
Alexander
5

Nie polecam aktualizowania bazy danych do nowej wersji głównej lokalnie (stosuj poprawki bezpieczeństwa) tylko po to, aby to naprawić, ponieważ chcesz, aby pasowało do dowolnej wersji, którą masz w produkcji.

Naprawiło to w systemie Ubuntu 16.04, przywracając z bazy danych Heroku.

Najpierw upewnij się, że masz repozytorium postgresql, o którym wspomniał diego. Następnie zainstaluj zaktualizowanego klienta.

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

Jeśli używasz Ubuntu 17.04 lub 17.10, pamiętaj, że repozytorium Zesty Repo PostgreSQL nie ma zaktualizowanego klienta, którego potrzebujesz. Zamiast tego będziesz chciał użyć repozytorium xenial Postgres.

Ivan
źródło
Zalecam aktualizację bazy danych, ponieważ jest to łatka bezpieczeństwa, która jest dość ważna, jeśli Twoja baza danych uruchamia zapytania od niezaufanych użytkowników: wiki.postgresql.org/wiki/ ... ”Celem wydania było rozwiązanie problemu CVE-2018-1058, które opisuje w jaki sposób użytkownik może tworzyć obiekty o podobnych nazwach w różnych schematach, które mogą zmieniać zachowanie zapytań innych użytkowników i powodować nieoczekiwane lub złośliwe zachowanie, nazywane również atakiem „konia trojańskiego”.
RobM
Dostaję, Unable to locate package postgresql-client-10kiedy to robię
Doug
@RobM Zgoda. Przez „nie polecaj aktualizacji ...” miałem na myśli nieaktualizowanie do wersji głównej, której nie używasz w środowisku produkcyjnym. Z pewnością rozsądne jest uaktualnienie do najnowszej poprawki bezpieczeństwa w głównej wersji lokalnie i oczywiście na produkcji. Poprawię słownictwo w mojej odpowiedzi, aby lepiej odzwierciedlało moje znaczenie.
Ivan
1
@Doug Nie zapomnij najpierw dodać odpowiedniego repozytorium postgres. Podobnie jak to opisano w tym komentarzu. stackoverflow.com/a/49116272/3975541
Ivan
4

Oto jak rozwiązałem problem w Ubuntu (16.04 LTS), w którym pg_restore / pg_dump dał mi starszą wersję, z psql

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8

$ psql --version
psql (PostgreSQL) 9.5.14

Problem polega na tym, że mam zainstalowanych wiele wersji pg, a pg_restore wskazywał na wcześniejszą wersję

$ 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

Poprawka polega na utworzeniu pliku ~ / .postgresqlrc wskazującego na poprawną wersję

$ cat ~/.postgresqlrc

9.5 main *

Po wykonaniu tej czynności pg_restore wskazuje na poprawną wersję i polecenie przechodzi

Szczegóły podane tutaj: /server/610777/wrong-version-of-pg-dump-on-ubuntu

Rabi Cherian
źródło
3

Napotkałem ten problem na pgadmin III i udało mi się go naprawić poprzez zmianę lokalizacji plików binarnych:

Menu Plik> Opcje> Ścieżki binarne, a następnie zmieniono „PG bin path” na postgresql / 9.x / bin zamiast na ProgramFiles / pgadmin. Przywrócenie zadziałało później.

op op opself
źródło
2

Używasz starej wersji pliku binarnego pg_restore, która nie obsługuje przywracania dostarczonego pliku zrzutu. Upewnij się, że używasz najnowszej wersji Postgres, która musi być nowsza niż następująca wersja: https://www.postgresql.org/about/news/1834/ (10.3, 9.6.8, 9.5.12, 9.4.17 i 9.3.22).

Możesz sprawdzić wersję pg_restore, której używasz, uruchamiając pg_restore --version.

Jeśli używasz narzędzia innej firmy, takiego jak PgAdmin, do przywrócenia dostarczonego pliku zrzutu, przywracanie może się nie powieść, nawet jeśli zainstalowana wersja Postgres jest aktualna. Wynika to z tego, że narzędzia innych firm często łączą własne wersje pliku binarnego pg_restore, które mogą nie być aktualne.

Vagner Dev
źródło
0

Napotkałem ten sam błąd. Zaktualizowałem lokalnie do postgresql 10.3 i to rozwiązało problem.

Sean McCleary
źródło
-1

Dla Windowsa:

Otwórz wiersz polecenia ( cmd), a następnie przejdź do lokalizacji C:\Program Files\PostgreSQL\9.6\bini uruchom następujące polecenia:

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

Mam nadzieję, że to ci pomoże

Reena khan
źródło
-3

Pobiegłem w tym samym numerze 10 minut temu i dowiedziałem się o tym wątku z 2005 roku: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

Zasadniczo facet mówi, że plik zrzutu jest uszkodzony.

nfilzi
źródło
3
Dziwne. Utworzyłem plik zrzutu z heroku i mam ten sam problem. To nigdy wcześniej się nie wydarzyło. Próbowałem zaktualizować postgresql z 9.6 do 10, ale to nie zadziałało.
karantan
1
Czy korzystasz z 10.2 czy 10.3? Wierzę, że teraz musisz być na 10.3.
Jack Kinsella
Ten wątek na liście dyskusyjnej pochodzi z 2005 roku. Ostatnio coś się tu zmieniło, co różni się od tego, co dotyczy tego wątku.
Yetanotherjosh