Niezgodność wersji Postgresql 9.2 pg_dump

141

Próbuję zrzucić bazę danych Postgresql za pomocą narzędzia pg_dump .

$ pg_dump books > books.out

Jak zawsze otrzymuję ten błąd.

pg_dump: server version: 9.2.1; pg_dump version: 9.1.6
pg_dump: aborting because of server version mismatch

Ta --ignore-versionopcja jest teraz przestarzała i naprawdę nie byłaby rozwiązaniem mojego problemu, nawet gdyby zadziałała.

Jak mogę zaktualizować pg_dump, aby rozwiązać ten problem?

Chris Colla
źródło
proste kroki stackoverflow.com/a/42158528/4758119
Deepak Mahakale

Odpowiedzi:

27

Możesz zainstalować PostgreSQL 9.2.1 na pg_dumpkomputerze klienta lub po prostu skopiować go $PGHOMEz serwera PostgreSQL na komputer klienta. Należy zauważyć, że nie ma potrzeby initdbtworzenia nowego klastra na komputerze klienckim.

Po zakończeniu instalacji oprogramowania 9.2.1 pamiętaj o edycji niektórych zmiennych środowiskowych w swoim .bash_profilepliku.

franki
źródło
75

Napotkałem to podczas korzystania z Heroku na Ubuntu, a oto jak to naprawić:

  1. Dodaj repozytorium apt PostgreSQL zgodnie z opisem w sekcji „ Pliki do pobrania dla systemu Linux (Ubuntu) ”. (Istnieją podobne strony dla innych systemów operacyjnych).

  2. Uaktualnij do najnowszej wersji (dla mnie 9.3) za pomocą:

    sudo apt-get install postgresql
  3. Odtwórz dowiązanie symboliczne w programie /usr/bin:

    sudo ln -s /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump --force

    Numer wersji w /usr/lib/postgresql/...powyższej ścieżce powinien odpowiadać server versionnumerowi w otrzymanym błędzie. Jeśli więc twój błąd mówi pg_dump: server version: 9.9,, połącz się z /usr/lib/postgresql/9.9/....

Seth
źródło
Dzieje się tak tylko wtedy, gdy aktualizujesz PostgreSQL. Właśnie wykonałem nową instalację systemu operacyjnego i nie miałem z tym żadnych problemów.
Seth
Dla każdego, kto się zastanawia, to rozwiązanie dotyczy również Ubuntu innego niż Heroku.
IanBussieres
2
Zgodnie z tym, co zostało powiedziane w tej odpowiedzi , jest to również dość zły pomysł.
Arthur
Ta odpowiedź zaleca usunięcie oprogramowania przez usunięcie folderu. Tutaj właśnie odtwarzamy dowiązanie symboliczne.
Seth
2
Idealny! Odtworzenie dowiązania symbolicznego po aktualizacji postgres
Yo Ludke
61
  1. Sprawdź zainstalowane wersje pg_dump:

    find / -name pg_dump -type f 2>/dev/null
  2. Mój wynik był:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
  3. Zainstalowano dwie wersje. Aby zaktualizować pg_dump do nowszej wersji:

    sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force

Spowoduje to utworzenie dowiązania symbolicznego do nowszej wersji.

Omer Aslam
źródło
2
Znalezienie wersji przy użyciu locate pg_dump
Obromios
1
IMO, nie powinieneś dodawać, 2>/dev/nullponieważ spowoduje to wyrzucenie strumienia ERROR zamiast drukowania go na konsoli. Myślę, że powinno się chcieć zobaczyć jakiekolwiek błędy, z wyjątkiem kilku rzadkich przypadków. Na przykład w moim przypadku przypomina mi, że nie byłem rootem, przez co nie udało mi się zobaczyć niektórych katalogów, w których zainstalowano nowszą wersję pg_dump. Ogólnie nie usuwaj błędów.
Poutrathor
40

Komputery Mac mają wbudowane /usr/bin/pg_dumppolecenie, które jest używane domyślnie.

Wraz z instalacją postgresql otrzymujesz kolejny plik binarny pod adresem /Library/PostgreSQL/<version>/bin/pg_dump

user2148301
źródło
3
Lokalizacja będzie się różnić w zależności od tego, jak zainstalowano PostgreSQL (instalator EnterpriseDB, MacPorts, Homebrew itp.), Ale istota odpowiedzi - że użytkownik prawdopodobnie ma już zainstalowaną odpowiednią wersję - jest z pewnością słuszna.
Craig Ringer
3
W moim przypadku otwarcie .bash_profile i dodanie „export PATH = / Applications / Postgres.app / content / macos / bin: $ PATH” zrobiło magię.
Alex Weber,
29

Możesz po prostu zlokalizować pg_dumpi użyć pełnej ścieżki polecenia

locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/9.3/bin/pg_dump
/usr/lib/postgresql/9.3/bin/pg_dumpall
/usr/lib/postgresql/9.6/bin/pg_dump
/usr/lib/postgresql/9.6/bin/pg_dumpall

Teraz po prostu użyj ścieżki żądanej wersji w poleceniu

/usr/lib/postgresql/9.6/bin/pg_dump books > books.out
Deepak Mahakale
źródło
1
Dla użytkowników CentOS (moja wersja to 6.9 Final):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Davidson Lima
@ jDub9 jakiej wersji użyłeś podczas wykonywania zrzutu? Upewnij się, że używasz tego samego
Deepak Mahakale
16

Jeśli korzystasz z Ubuntu, możesz mieć zainstalowaną starą wersję postgresql-client. Na podstawie wersji w komunikacie o błędzie rozwiązanie byłoby następujące:

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2
Abe Voelker
źródło
11

Za każdym razem, gdy aktualizujesz lub ponownie instalujesz nową wersję PostgreSQL, pg_dump instalowana jest najnowsza wersja .

PostgreSQL/bin Gdzieś w twoim systemie musi znajdować się katalog pod najnowszą wersją PostgreSQL, którą zainstalowałeś (9.2.1 jest najnowsza) i spróbuj uruchomić pg_dump stamtąd.

solaimuruganv
źródło
10
Wskazówka: w Terminal.app,find / -name pg_dump -type f 2>/dev/null
Craig Ringer
8

Dla osób korzystających z Postgres.app :

  1. Dodaj następujący kod do swojego .bash_profile:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
  2. Zrestartuj terminal.

Andreas
źródło
7

Dla komputerów Mac z Homebrew. Miałem ten problem podczas pobierania bazy danych z Heroku. Naprawiłem to tylko działając:

brew upgrade postgresql
hcarreras
źródło
6

Użytkownicy komputerów Mac powinni umieścić na początku pliku .profile.

export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

następnie uruchomić

. ~/.profile
Andrey Yasinishyn
źródło
3

Jak wyjaśniono, dzieje się tak, ponieważ Twój postgresql jest w starej wersji -> zaktualizuj go dla komputerów Mac przez homebrew:

brew tap petere/postgresql,

brew install <formula>(np . brew install petere/postgresql/postgresql-9.6:)

Usuń stary postgre:

brew unlink postgresql

brew link -f postgresql-9.6

Jeśli wystąpi jakiś błąd, nie zapomnij przeczytać i postępować zgodnie z instrukcjami parzenia na każdym kroku.

Sprawdź to, aby uzyskać więcej informacji: https://github.com/petere/homebrew-postgresql

ThangTD
źródło
3

Alternatywna odpowiedź, której chyba nikt inny nie omówił.

Jeśli masz zainstalowanych wiele klastrów PG (tak jak ja), możesz wyświetlić te, które używają pg_lsclusters.

Na wyświetlonej liście powinna być widoczna wersja i klaster.

Następnie możesz to zrobić:

pg_dump --cluster=9.6/main books > books.out

Oczywiście zamień wersję i nazwę klastra na odpowiednią dla danej sytuacji, z tego, co jest zwracane, pg_lsclustersoddzielając wersję i klaster znakiem /. Jest to skierowane do konkretnego klastra, z którym chcesz korzystać.

ManoDestra
źródło
1
To jest bardzo przydatne. Ponieważ byłem zdezorientowany, dlaczego pg_dumpnie pracowałem nad jedną z moich klastrów. Okazało się, że korzystał z domyślnej wersji Postgresql, gdy jeden z moich klastrów został zaktualizowany do nowszej wersji. Określenie klastra rozwiązało problem.
Andrius
3

Dla mnie problem polegał na tym, że aktualizacja psql apt-getnie rozwiązała nowszych wersji, nawet później update. Następujące działały.

Ubuntu

Zacznij od importu klucza GPG dla pakietów PostgreSQL.

sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Teraz dodaj repozytorium do swojego systemu.

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

Zainstaluj PostgreSQL na Ubuntu

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

https://www.postgresql.org/download/linux/ubuntu/

Glen Thompson
źródło
1
Nie spowoduje to zastąpienia istniejących plików wykonywalnych na twoim komputerze, więc musisz jawnie użyć nowej wersji pg_dump, np. /Usr/lib/postgresql/9.6/bin/pg_dump lub utworzyć nowy skrót, np. / Usr / bin / pg_dump96
vinh
Nie musiałem jawnie używać nowego, podniósł go.
rado
2

Jeśli masz zainstalowanego dockera, możesz zrobić coś takiego:

$ docker run postgres:9.2 pg_dump books > books.out

Spowoduje to pobranie kontenera Docker z Postgres 9.2, uruchomienie pg_dumpwewnątrz kontenera i zapisanie danych wyjściowych.

mzsanford
źródło
2

Odpowiedź brzmi głupio, ale jeśli pojawi się powyższy błąd i chcesz uruchomić pg_dump dla wcześniejszej wersji, przejdź do katalogu bin postgres i wpisz

./pg_dump nazwa_serwera> out.sql ./ ignoruje root i szuka pg_dump w bieżącym katalogu

Joe Root
źródło
2

Miałem ten sam błąd i tak go rozwiązałem w moim przypadku. Oznacza to, że Twoja wersja postgresql to 9.2.1, ale uruchomiłeś usługę postgresql w wersji 9.1.6.

Jeśli biegniesz psql postgres, zobaczysz:

psql (9.2.1, server 9.1.6)

To, co zrobiłem, aby rozwiązać ten problem, to:

  1. brew services stop [email protected]
  2. brew services restart [email protected]

Teraz biegnij psql postgresi powinieneś mieć:psql (9.2.1)

Możesz także uruchomić, brew services listaby zobaczyć stan swoich postgresów.

jasny
źródło
1

** po zainstalowaniu postgres wersja jest zgodna (9.2) Utwórz dowiązanie symboliczne lub nowy skrót

** - w „/ usr / bin”

syntag is = sudo ln -s [path for use] [new shortcut name]

przykład

sudo ln -s /usr/lib/postgresql/9.2/bin/pg_dump new_pg_dump

- jak dzwonić: new_pg_dump -h 192.168.9.88 -U baza danych postgres

ช่าง คอม ผู้ ยิ่ง ใหญ่
źródło
1

Spróbuj tego:

export PATH=/usr/local/bin:$PATH
Benjamin Crouzier
źródło
1

Jeśli baza danych jest zainstalowana na innym komputerze, prawdopodobnie ma zainstalowaną poprawną wersję pg_dump. Oznacza to, że możesz wykonać polecenie pg_dump zdalnie za pomocą SSH: ssh username@dbserver pg_dump books > books.out

Możesz również użyć uwierzytelniania za pomocą klucza publicznego, aby wykonać działanie bez hasła. Kroki, aby to osiągnąć:

  1. Wygeneruj (jeśli jeszcze nie zostało to zrobione) parę kluczy za pomocą polecenia ssh-keygen.
  2. Skopiuj klucz publiczny na serwer bazy danych, zwykle ~ / .ssh / Authorized_keys.
  3. Sprawdź, czy połączenie działa za pomocą polecenia ssh.
tomasz
źródło
1

Cóż, miałem ten sam problem, ponieważ mam zainstalowane dwie wersje postgress.

Po prostu użyj odpowiedniego pg_dump i nie musisz niczego zmieniać, w twoim przypadku:

 $> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out
Petr
źródło
0

Jeśli używasz Postgres.app Heroku, pg_dump (wraz ze wszystkimi innymi plikami binarnymi) jest w /Applications/Postgres.app/Contents/MacOS/bin/

więc w takim razie tak jest

ln -s /Applications/Postgres.app/Contents/MacOS/bin/pg_dump /usr/local/bin/pg_dump

lub

ln -s /Applications/Postgres.app/Contents/MacOS/bin/* /usr/local/bin/.

po prostu złapać je wszystkie

mlebarron
źródło
0

W przypadku komputerów Mac użyj find / -name pg_dump -type f 2>/dev/nullznajdź lokalizację pg_dump

U mnie mam następujące wyniki:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_dump

Jeśli nie chcesz używać sudo ln -s new_pg_dump old_pg_dump --force, po prostu użyj:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumpzastąpić pg_dumpw terminalu

Na przykład:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump books > books.out

Mi to pasuje!

zhaoqing
źródło
0

Pobierz odpowiednią wersję postgres tutaj:

https://www.postgresql.org/download/

Upewnij się, że uruchomiłeś następujące polecenia (adres URL postgresql.org/download wygeneruje określony adres URL do użycia; ten, którego używam poniżej, jest tylko przykładem dla centos 7) jako sudo:

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql11-server

Twoja wersja pg_dump powinna być teraz zaktualizowana, sprawdź za pomocą pg_dump -V

lobi
źródło
-6

Podobny problem wystąpił podczas instalacji Fedory 17. Oto, co zrobiłem, aby obejść ten problem

  • Usuń wbudowane pg_dumpw /usr/bin/pg_dump(jako root: „rm / usr / bin / pg_dump”)
  • Teraz stwórz symboliczne dowiązanie do instalacji postgresql

    Znowu jako root ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

To powinno załatwić sprawę

Joseph N.
źródło
9
Nonono, nie usuwaj tylko plików zarządzanych pakietami! Jeśli jest w /usr/(zamiast /usr/local/, /home/lub /opt/, gdzie usuwanie rzeczy jest ogólnie w porządku), naprawdę musisz użyć menedżera pakietów - rpm& yumlub dpkgi apt-getlub aptitude, w zależności od dystrybucji. Odinstaluj pakiet za pomocą rpmlub zmień PATHzmienną środowiskową w swoim, .bash_profileaby nowsza wersja została znaleziona jako pierwsza. Jeśli masz wątpliwości, czy coś jest w zarządzaniu pakietami, użyj rpm -qf /path/to/file(RPM) lub dpkg -S /path/to/file(dpkg)
Craig Ringer