Як запустити конкретну версію (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.

IOW, правильну версію слід вибирати автоматично - якщо ви якось не накрутили установку. Ви завжди можете додати варіант, --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опції командного рядка.
Алексіс Вілке

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.