Первоначально я установил 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