Как запустить конкретную версию (8.4, 9.1) команды postgresql pg_ * (например, pg_dump)

11

У меня установлены Postgresql версии 8.4 и 9.1. Как указать конкретную версию команды для выполнения любой команды Postgresql? (например, psql, pg_dump, pg_ctlcluster, pg_restore, ...)

Мой вопрос мотивирован желанием сделать pg_dump при подготовке к обновлению с 8.4 до 9.1, и я хочу знать, какую версию pg_dump я использую.

Я работаю на Ubuntu 10.04 Natty.

Роб Беднарк
источник

Ответы:

15

Вы работаете в Ubuntu и, очевидно, у вас установлен Мартин Питт pg_wrapper(судя по pg_ctlcluster), который предоставляется пакетом postgresql-commonи поставляется со стандартными пакетами Debian. Я использую то же самое на Debian .

В системе Linux запустите whichоболочку, чтобы увидеть, какой исполняемый файл фактически выбран:

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_dumpфактически является символической ссылкой pg_wrapper, которая динамически выбирает соответствующую версию клиентской программы для кластера db, pg_dumpс которым вы работаете . Я цитирую справочную страницу pg_wrapper:

Эта программа запускается только как ссылка на имена, которые соответствуют программам PostgreSQL в / usr / lib / postgresql / version / bin. Он определяет настроенный кластер и базу данных для пользователя и вызывает соответствующую версию нужной программы для подключения к этому кластеру и базе данных, предоставляя любые указанные опции для этой команды.

   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.

Итак, правильная версия должна быть выбрана автоматически - если только вы не испортили установку. Вы всегда можете добавить опцию, --clusterчтобы быть конкретным.

Эрвин Брандштеттер
источник
1
Просто примечание: это не помогает с удаленными подключениями. У меня установлены клиентские инструменты 8.3 и 9.1, и по какой-то причине по умолчанию используется 8.3. Я должен вручную выбрать путь в / usr / lib, чтобы использовать правильную версию. Я бы подумал, что новый будет использоваться по умолчанию, но, похоже, нет.
Сами Кухмонен
Вам не нужен самый новый, но тот, который соответствует вашей базе данных. Для некоторых целей новая версия pg_dump может быть лучшим вариантом.
Эрвин Брандштеттер
Не могли бы вы уточнить, что именно нужно перейти в файл ~ / .postgreslqrc? Мой вывод клиента -> psql (8.4.21, сервер 9.1.13) ВНИМАНИЕ: версия psql 8.4, версия сервера 9.1. Некоторые функции psql могут не работать.
Кройдон Диас
Это не похоже на работу для меня. Я создал дамп на сервере с 9.1, и когда я попытался восстановить на другом сервере с 9.1 и 8.4, он говорит мне, что не может распознать формат файла. Кроме того, нет --clusterопции командной строки.
Алексис Уилке
4

я использую

PGCLUSTER=8.4/main pg_dump ...
PGCLUSTER=9.1/main pg_dump ...
Gavriel
источник