Jak uruchomić określoną wersję (8.4, 9.1) komendy postgresql pg_ * (np. Pg_dump)

11

Mam zainstalowane Postgresql wersje 8.4 i 9.1. W jaki sposób mogę podać konkretną wersję polecenia do uruchomienia dla dowolnego polecenia Postgresql? (np psql, pg_dump, pg_ctlcluster, pg_restore, ...)

Moje pytanie jest motywowane chęcią zrobienia zrzutu pg_dump w ramach przygotowań do aktualizacji z 8.4 do 9.1, i chcę wiedzieć, którą wersję pg_dump używam.

Używam Ubuntu 10.04 Natty.

Rob Bednark
źródło

Odpowiedzi:

15

Jesteś na Ubuntu i oczywiście masz pg_wrapperzainstalowany Martin Pitt (sądząc po pg_ctlcluster), który jest dostarczany przez pakiet postgresql-commoni jest dostarczany ze standardowymi pakietami Debiana. Używam tego samego na Debianie .

W systemie Linux uruchom whichw powłoce, aby zobaczyć, który plik wykonywalny jest rzeczywiście wybrany:

postgres@db:~$ which pg_dump
/usr/bin/pg_dump
postgres@db:~$ ls -l /usr/bin/pg_dump
lrwxrwxrwx 1 root root 37  4. Jun 18:57 /usr/bin/pg_dump -> ../share/postgresql-common/pg_wrapper

pg_dumpjest faktycznie dowiązaniem symbolicznym pg_wrapper, które dynamicznie wybiera odpowiednią wersję programu klienckiego dla klastra db, z którym działasz pg_dump. Cytuję stronę podręcznika użytkownika pg_wrapper:

Ten program działa tylko jako łącze do nazw, które odpowiadają programom PostgreSQL w / usr / lib / postgresql / version / bin. Określa skonfigurowany klaster i bazę danych dla użytkownika i wywołuje odpowiednią wersję żądanego programu, aby połączyć się z tym klastrem i bazą danych, podając dowolne określone opcje dla tego polecenia.

   The target cluster is selected by the following means, in descending order of precedence:
   1.  explicit specification with the --cluster option
   2.  explicit specification with the PGCLUSTER environment variable
   3.  matching entry in ~/.postgresqlrc (see postgresqlrc(5)), if that file exists
   4.  matching entry in /etc/postgresql-common/user_clusters (see user_clusters(5)), if that file exists
   5.  If only one local cluster exists, that one will be selected.
   6.  If several local clusters exist, the one listening on the default port 5432 will be selected.

   If none of these rules match, pg_wrapper aborts with an error.

IOW, właściwą wersję należy wybrać automatycznie - chyba że w jakiś sposób zepsułeś instalację. Zawsze możesz dodać opcję, --clusteraby być konkretnym.

Erwin Brandstetter
źródło
1
Tylko uwaga: nie pomaga to w zdalnych połączeniach. Mam zainstalowane narzędzia klienta w wersji 8.3 i 9.1 i z jakiegoś powodu domyślnie jest to 8.3. Muszę ręcznie wybrać ścieżkę w / usr / lib, aby użyć poprawnej wersji. Myślałem, że najnowszy będzie domyślnie używany, ale wydaje się, że nie.
Sami Kuhmonen
Nie potrzebujesz najnowszej, ale pasującej do Twojej bazy danych. Jednak dla niektórych celów lepszym rozwiązaniem może być nowa wersja pg_dump.
Erwin Brandstetter
Czy możesz wyjaśnić, co dokładnie musi znaleźć się w pliku ~ / .postgreslqrc? Dane wyjściowe mojego klienta -> psql (8.4.21, serwer 9.1.13) OSTRZEŻENIE: psql wersja 8.4, serwer wersja 9.1. Niektóre funkcje psql mogą nie działać.
Croydon Dias
Wydaje mi się, że to nie działa. Utworzyłem zrzut na serwerze z wersją 9.1, a kiedy próbowałem przywrócić na innym serwerze z wersjami 9.1 i 8.4, mówi mi, że nie może rozpoznać formatu pliku. Ponadto nie ma --clusteropcji wiersza polecenia.
Alexis Wilke,
4

używam

PGCLUSTER=8.4/main pg_dump ...
PGCLUSTER=9.1/main pg_dump ...
Gavriel
źródło