Назад | Перейти на главную страницу

Неверная версия pg_dump в Ubuntu

Первоначально я установил postgres 9.2 на Ubuntu, а затем обновил его до 9.3 в соответствии с инструкциями здесь: http://www.postgresql.org/download/linux/ubuntu/ (с использованием репозитория postgres apt).

Однако pg_dump, который является псевдонимом для / usr / share / postgresql-common / pg_wrapper, не обновился.

pg_dump: server version: 9.3.4; pg_dump version: 9.2.8
pg_dump: aborting because of server version mismatch

Как мне это обновить? Я попытался выяснить, какие пакеты требуют обновления, но я даже не уверен, что это правильно.

Оказывается, установка клиента 9.3 не приводит к автоматическому удалению клиента 9.2, и если они оба находятся на такой машине, то это то, что вы получите. Ответ - удалить postgresql-client-9.2 (или любую другую подходящую старую версию в вашем случае).

вы можете проверить вывод команды

dpkg -l | grep postgres

чтобы узнать, какие версии установлены и активны, pg_dump обычно является частью пакета postgresql-client-common.

(И отредактируйте свой вопрос, непонятно, как вы обновились с версии 9.3 до 9.3 ...)

Я тоже столкнулся с той же проблемой. Сначала я удалил старые версии pgdump. В основном это часть postres-client. Итак, удалите их, используя

apt-get удалить postgresql-client-common

Установите версию в соответствии с вашими требованиями, выполнив следующие команды. Я использую ubuntu 16.04. Замените «xenial» своей версией ubuntu в первой команде. Команда для проверки версии ubuntu-
cat /etc/os-release

$ echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main "> /etc/apt/sources.list.d/pgdg.list
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key добавить -
$ sudo apt-get update
$ apt-cache search postgresql | grep postgresql-client
$ apt-get установить postgresql-client-9.5

Мне удалось исправить свои проблемы, удалив клиент postgresql

sudo apt-get remove postgresql-client-common

А потом переустановка

  sudo apt-get install postgresql-client-11

tl: dr; не нужно удалять старые кластеры. Вместо этого введите следующее в ~/.postgresqlrc

<version> <clustername> <defaultdb>,

например., 9.6 main *


Удалять старые кластеры не обязательно. Я заглянул в /usr/share/postgresql-common/pg_wrapper, в котором есть эти строки:

# for psql we always want the latest version, as this is backwards 
compatible
# to every major version that that we support
if ($cmdname eq 'pg_wrapper') {
    error "pg_wrapper should not be called directly, but through a symlink";
} elsif ($cmdname =~ /^(psql|pg_archivecleanup|pg_isready)$/) {
    $cmd = get_program_path ($cmdname, get_newest_version);
} else {
    $cmd = get_program_path ($cmdname, $version);
}

Другими словами, такие команды, как psql всегда будет запускаться с последней установленной версией, установленной на вашем компьютере, но такие команды, как pg_dump не буду.

На вершине pg_wrapper подсказка:

# Call a PostgreSQL client program with the version, cluster and default
# database specified in ~/.postgresqlrc or
# /etc/postgresql-common/user_clusters.

man postgresqlrc говорит нам, что ~/.postgresqlrc должен быть отформатирован так:

<version> <cluster name> <default database

pg_lsclusters дал мне следующий результат:

Ver Cluster Port Status Owner    Data directory               Log file
9.5 main    5432 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
9.6 main    5433 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

Это означало, что мой ~/.postgresqlrc должно выглядеть так:

9.6 main *

Что дает мне желаемую версию при запуске pg_dump -V.

Если вам нужно иметь несколько версии клиента postgresql, когда вы можете использовать

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

для старого кластера и

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

для новых

См. Принятый ответ на askubuntu для подробностей: https://askubuntu.com/a/647341/1044581