Несоответствие версии pg_dump в Debian


8

Я использую PostgreSQL в Debian Unstable / Sid. У меня есть текущие версии (9.1) из postgresql, postgresql-client, postgresql-client-common(143) установлен.

Проблема, которую я имею, пытается бежать pg_dump. Я получаю эту ошибку:

pg_dump: server version: 9.1.9; pg_dump version: 9.0.6
pg_dump: aborting because of server version mismatch

Я не могу понять, как получить более новую версию pg_dump. Кажется, он идет из postgresql-client-commonпакета, и я пытался запустить apt-get --reinstallего, но это не дало мне более новую версию pg_dump.

Как мне обойти это? Или где я могу найти пакет с более новой версией pg_dump?


Вы понимаете, что это нормально, так как вы используете Debian Sid? Это нестабильно. Что which pg_dumpпоказывает тебе? Просто чтобы подтвердить, что это на самом деле упакованная версия, а не какая-то другая.
SLM

Да, я проверил это. Это показывает /usr/bin/pg_dump, и dpkg -S /usr/bin/pg_dumpдает мне postgresql-client-common: /usr/bin/pg_dump.
Supercheetah

Проверьте мой ответ, посмотрите, поможет ли это.
SLM

Ответы:


3

Пара вариантов.

Загрузите .deb 9.1 с сайта Postgres

Взгляните на эту страницу под названием: Загрузки Linux (Debian) - PostgreSQL . Вы можете либо загрузить обновленный .deb непосредственно с сайта, либо повторно указать его хранилище, и выполнить команду, подобную этой:

apt-get install postgresql-9.1

Backian Debian

Вы можете найти конкретные версии здесь, http://backports.debian.org/ .

Используйте универсальную версию

Вы можете скачать двоичную сборку PostgreSQL и поместить ее в свой домашний каталог или, /optнапример,.

Загрузите одну из предварительных сборок для корпоративного использования

У меня нет большого опыта работы с ними, но вы можете загрузить одну из них, аналогичную универсальной версии, и использовать клиент из его установки, как, впрочем, и создавать дамп вашей базы данных.

Пакеты перекрестного распространения

Вы можете скачать пакеты, которые были собраны так, что они не зависят от распространения. Я только что загрузил версию 9.1.9, и она включает в себя pg_dumpинструмент.

Программное обеспечение предоставляется в формате .rpm или .deb и устанавливается в /opt/postgres/9.1. В частности, pg_dumpинструмент приводится здесь: /opt/postgres/9.1/bin/pg_dump.


Версия PostgreSQL на самом деле не проблема. Это pg_dumpстарая и несовместимая версия . Есть ли место, где я могу найти именно это?
Supercheetah

Я думаю, что это связано с этими пакетами. Я просто скачал одну из предварительных сборок для конкретной версии и использовал pg_dumpкоманду оттуда. Их не нужно устанавливать, просто положить их в каталог. Возможно, вам придется установить переменную окружения, чтобы она указывала на каталог библиотеки, но это должно быть довольно просто.
SLM

4

Другой вариант, который может подойти вам, - удалить старую параллельную версию:

в Debian / Ubuntu:

sudo apt-get remove postgresql-8.4
sudo apt-get remove postgresql-client-8.4

Это сохраняет более позднюю версию (например, 9.1), удаляя только старые версии 8.4 клиента и сервера.


4

В моем случае у меня было два набора баз данных, некоторые из которых работали на старой версии Postgresql 8.4, а другие - на версии 9.1. Что я сделал, чтобы найти pg_dumpв Linux-машине с помощью locateкоманды ниже

$ locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/8.4/bin/pg_dump
/usr/lib/postgresql/8.4/bin/pg_dumpall
/usr/lib/postgresql/9.1/bin/pg_dump
/usr/lib/postgresql/9.1/bin/pg_dumpall

Так как по умолчанию /usr/bin/pg_dumpиспользуется Postgresql версии 8.4, я просто указал в /usr/lib/postgresql/9.1/bin/pg_dumpкомандной строке при выгрузке базы данных 9.1, которая работает на другом порту, и это сработало.

$ /usr/lib/postgresql/9.1/bin/pg_dump -p 5434

2

В дополнение к ответам выше, вы также можете указать pg_dumpи другие команды, какую версию использовать через clusterопцию. Например,

$pg_dump --cluster 9.1/main

будет нацелена на версию 9.1.

Обратите внимание, что это использует pg_wrapper, который поставляется postgresql-commonи работает на Ubuntu (Debian). Также обратите внимание, что кластер ( mainв примере) может отличаться в ваших настройках.

Более подробную информацию о pg_wrapperможно найти в этом ответе DBA .


0

Я столкнулся с той же проблемой сегодня, и ответ Эрика, кажется, наиболее точный. Проблема, вероятно, в том, что у вас разные версии postgresql-client, а pg_dump просто использует самый старый клиент.

Вы можете решить эту проблему, используя полный путь, как он описал, но я нашел более простое решение - удалить пакет postgresql-client-common (который удаляет все клиенты), а затем переустановить postgresql-client-9.3. Это оставляет вам только последние версии pg_dump, которые, вероятно, вам нужны.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.