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

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

Я установил два сервера 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 много месяцев спустя — мне нужнообаустановлены серверы баз данных).

решение1

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.

Видетьчеловек pg_wrapperдля большего.

решение2

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

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

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

решение3

Если вы используете docker, вы можете запустить любую версию pg_dump без необходимости управлять несколькими установками. Это запишет файл в /path/to/dump/to/myfilename.dumppostgres 12.5:

docker run --rm --network=host -v "/path/to/dump/to:/tmp/dump" \
  postgres:12.5 pg_dump -Fc -v --dbname="my_db_bame" -f "/tmp/dump/myfilename.dump"
  • --rmудаляет контейнер после выполнения команды
  • --network=hostподключает контейнер к локальной сети хоста
  • -v ...монтирует ваш каталог хоста ( /path/to/dump/to) во временный каталог внутри контейнера

Вам просто нужно убедиться, что каталог, в который вы монтируете ( /tmp/dump), совпадает с каталогом, в который pg_dump записывает данные.

Затем вы можете изменить 12.5 на любую другую версию, которую захотите.

Связанный контент