Як вирішити "невідповідність версії сервера" за допомогою pg_dump, коли мені потрібні BOTH 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Тоді вам доведеться змінити змінну середовища, з якою працює програма.
Крейг Рінгер

У мене була така ж проблема. Мені довелося встановити через сховище apt PostgreSQL: 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 для отримання додаткової інформації.


для чого версія / головна версія? що головне?
Олександр Міллс

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

щоб оновити до потрібного нам

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