Как решить проблему «несоответствия версий сервера» с помощью pg_dump, когда мне нужно ОБА установить серверы PostgreSQL?

13

Я установил два сервера PostgreSQL на моем компьютере. Один 9,1, а другой 9,3. Мне нужны оба сервера.

Однако, когда я запускаю pg_dump, я получаю ошибку несоответствия версий:

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

Как я могу решить это? (Невозможно удалить ни одну из версий - сначала я установил 9.1, а много месяцев спустя - 9.3 - мне нужно установить оба сервера базы данных).

Луис Масуэлли
источник
Явно запустить версию 9.3 pg_dump. Оба установлены, но только один по умолчанию. Посмотрите update-alternativesпути или dpkg -Lклиентский пакет postgresql, чтобы увидеть, где они находятся. У меня нет немедленного доступа к коробке с Ubuntu, чтобы показать себя.
Крейг Рингер
Не можешь. Команда pg_dump запускается из другого приложения.
Луис Масуэлли
PATHТогда вам придется изменить переменную среды, с которой работает приложение.
Крейг Рингер
У меня такая же проблема. Мне пришлось установить через репозиторий PostgreSQL apt: askubuntu.com/a/831293/448857
neoneye

Ответы:

16

TL; DR : если оба экземпляра PostgreSQL управляются пакетами Ubuntu (как они должны), просто используйте --clusterопцию, чтобы выбрать экземпляр PostgreSQL для резервного копирования, и он автоматически выберет соответствующую версию pg_dump:

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

или

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

mainэто просто значение по умолчанию, запустите, pg_lsclustersчтобы увидеть ваши фактические имена в Clusterстолбце.

Как это работает: как установлено в пакетах Ubuntu, /usr/bin/pg_dumpна самом деле это мягкая ссылка /usr/share/postgresql-common/pg_wrapper, цель которой состоит в том, чтобы точно выбрать правильный экземпляр и запустить соответствующий двоичный файл. --clusterне существует в стандартных командах PostgreSQL, это дополнение к Debian / Ubuntu, которое предназначено для решения этой проблемы с несколькими версиями / несколькими путями.

Это то же самое для psql, createdb, createuserи т.д. около 18 команд Postgres в /usr/binфактически управляется pg_wrapper.

Смотрите man pg_wrapper для более.

Даниэль Верите
источник
для чего нужна версия / main? что главное?
Александр Миллс
1
@AlexanderMills: version= основная версия postgresql и main= имя кластера по умолчанию. Смотрите страницы pg_lsclusters и pg_wrapper.
Даниэль Верите
7

Ты можешь использовать:

sudo find / -name pg_dump

найти ваши версии pg_dumpв моем случае:/usr/pgsql-9.6/bin/pg_dump

так что дальше мы можем сделать:

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

для того, чтобы обновить до того, что нам нужно

Edilio
источник