Jak rozwiązać problem „niedopasowania wersji serwera” za pomocą pg_dump, gdy potrzebuję OBA zainstalowanych serwerów PostgreSQL?

13

Na moim komputerze zainstalowałem dwa serwery PostgreSQL. Jedna to 9,1, a druga 9,3. Potrzebuję obu serwerów zainstalowanych.

Jednak po uruchomieniu pg_dump pojawia się błąd niedopasowania wersji:

server version: 9.3.6; pg_dump version: 9.1.15
pg_dump: aborting because of server version mismatch

Jak mogę to rozwiązać? (Nie można odinstalować żadnej wersji - najpierw zainstalowałem 9.1 i 9.3 wiele miesięcy później - muszę zainstalować oba serwery bazy danych).

Luis Masuelli
źródło
Jawnie uruchom wersję 9.3 programu pg_dump. Oba są zainstalowane, ale tylko jeden jest domyślny. Sprawdź update-alternativesścieżki lub dpkg -Lpakiet klienta postgresql, aby zobaczyć, gdzie się znajdują. Nie mam natychmiastowego dostępu do okna Ubuntu, aby pokazać siebie.
Craig Ringer
Nie mogę. Komenda pg_dump jest uruchamiana z innej aplikacji.
Luis Masuelli
PATHNastępnie musisz zmienić zmienną środowiskową, z którą działa aplikacja.
Craig Ringer,
Miałem ten sam problem. Musiałem zainstalować za pośrednictwem repozytorium apt PostgreSQL: askubuntu.com/a/831293/448857
neoneye

Odpowiedzi:

16

TL; DR : jeśli oba instancje PostgreSQL są zarządzane przez pakiety Ubuntu (tak jak powinny), wystarczy użyć --clusteropcji, aby wybrać instancję PostgreSQL do utworzenia kopii zapasowej, a ona automatycznie wybierze odpowiednią wersję pg_dump:

pg_dump --cluster 9.1/main [other pg_dump options]

lub

pg_dump --cluster 9.3/main [other pg_dump options].

mainjest tylko wartością domyślną, uruchom, pg_lsclustersaby zobaczyć swoje rzeczywiste nazwy w Clusterkolumnie.

Jak to działa: tak jak zainstalowane przez pakiety Ubuntu, /usr/bin/pg_dumpjest w rzeczywistości miękkim linkiem do /usr/share/postgresql-common/pg_wrapper, którego celem jest właśnie wybranie właściwej instancji i uruchomienie odpowiedniego pliku binarnego. --clusternie istnieje w standardowych poleceniach PostgreSQL, jest to dodatek Debian / Ubuntu, który ma rozwiązać ten problem wielu wersji / ścieżek.

To jest taki sam dla psql, createdb, createuser, itd. Około 18 Postgres komendy w /usr/binfaktycznie zarządza pg_wrapper.

Zobacz man pg_wrapper, aby uzyskać więcej.

Daniel Vérité
źródło
do czego służy wersja / main? co jest główne
Alexander Mills,
1
@AlexanderMills: version= główna wersja postgresql i main= domyślna nazwa klastra. Zobacz strony pg_lsclusters i pg_wrapper.
Daniel Vérité,
7

Możesz użyć:

sudo find / -name pg_dump

znaleźć swoje wersje pg_dumpw moim przypadku:/usr/pgsql-9.6/bin/pg_dump

następnie możemy zrobić:

sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump

w celu aktualizacji do tej, której potrzebujemy

edilio
źródło