У меня PostgreSQL 9.4 и 9.5 на одном хосте с Ubuntu 14.04. Мои проблемы:
service postgresql start|stop
, обе версии запускаются / останавливаются. Но я хочу контролировать, что делать. psql
для подключения к PostgreSQL он всегда подключается к 9.4. Но я хочу контролировать, какой сервер мне делать. Я знаю, что могу подключиться через другой порт: 5432 для 9,4 и 5433 для 9,5. Но я хочу подключиться через одноранговую аутентификацию, то есть через сокет Unix. Мне удалось найти эти подсказки для двух вышеупомянутых вопросов по отдельности, но я не решил свои проблемы:
pg_ctlcluster
может выполнить эту работу, но я не знаю, как указать правильные параметры, например, имя-кластера. Как я мог это понять? Или у вас есть другой способ?unix_socket_directories = '/var/run/postgresql'
. Но обе версии имеют один и тот же каталог конфигурации, в котором есть подкаталоги 9.4-main.pg_stat_tmp 9.4-main.pid 9.5-main.pg_stat_tmp 9.5-main.pid
для разных версий. Когда я делаю psql -h /var/run/postgresql
, он просто подключается к старой версии 9.4.Может ли кто-нибудь помочь? Спасибо!
Что ж, после еще нескольких усилий я сам получаю ответы:
pg_ctlcluster
а также сериал pg_xxxcluster
команды для управления несколькими версиями / экземплярами PostgreSQL на одном хосте. Чтобы узнать версию и название кластера, просто выполните pg_lscluster
, который выводит как
9.4 main 5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.5 main 5433 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
Например, чтобы остановить 9.4, вы используете pg_ctlcluster stop 9.4 main
. Кстати, чтобы отключить автозапуск 9.4, edit /etc/postgresql/9.4/main/start.conf
psql
нужен --port, -p
возможность узнать, к какому экземпляру подключиться, даже для одноранговой аутентификации через Unix Socket, поскольку все версии имеют одинаковые unix_socket_directories
. Например, psql -p 5433 dbname
может подключаться через Unix Socket к версии 9.5, работающей с портом 5433, по умолчанию psql dbname
подключается к порту по умолчанию 5432, который принадлежит моей старой версии 9.4.Это оно!
В дистрибутивах на основе Debian, таких как Ubuntu, psql
(и несколько других команд PostgreSQL) - это символическая ссылка на pg_wrapper
, который предлагает --cluster
вариант. Видеть man pg_wrapper
для подробностей.
Для локальных подключений вы можете использовать
psql --cluster 9.4/main
psql --cluster 9.5/main
Чтобы увидеть свои версии, кластеры и порты, используйте pg_lsclusters
. Пример вывода:
# pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
9.6 main 5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
11 main 5433 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11-main.log
И чтобы установить значение по умолчанию, вы можете установить предпочитаемую версию для использования порта 5432 в /etc/postgresql/*/main/postgresql.conf
, и на какой-то другой порт для другой версии.
(Здесь также ответили: Запуск нескольких версий PostgreSQL на одном сервере Ubuntu )