У меня установлено несколько серверов PostgreSQL. Как отключить автоматическую загрузку для старого сервера?

24

Я использую Ubuntu 12.04 на Oracle VirtualBox. Пару месяцев назад я установил сервер PostgreSQL версии 9.1 на свою машину. Совсем недавно я узнал, что сервер PostgreSQL 9.3 поддерживает типы данных JSON, поэтому я решил обновить его.

Я обновился до 9.3, следуя инструкциям здесь:

https://wiki.postgresql.org/wiki/Apt

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install postgresql-9.3 pgadmin3

Этот установленный сервер версии 9.3 на моей машине наряду с версией 9.1. Запуск pg_lsclusters после новой загрузки дает:

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

Затем я выполнил следующее обслуживание после обновления: я экспортировал несколько таблиц с моего сервера 9.1 с помощью pg_dump и восстановил их на своем сервере 9.3. Затем я открыл свои конфигурационные файлы для 9.1 и 9.3 в /etc/postgresql/$VERSION/main/postgresql.confи поменял их номера портов так, чтобы мой psql-клиент по умолчанию подключался к новому серверу.

У меня вопрос такой. И 9.1, и 9.3 запускаются при загрузке. Я хотел бы запретить автоматическую загрузку 9.1, так как она занимает примерно 5% моей системной памяти. Как я могу это сделать?

Ресурсы проконсультированы:

Страница документации PostgreSQL при запуске сервера указывает мне на стандартный каталог init.d. Мой каталог init.d содержит скрипт postgresql. Похоже, что этот скрипт может быть настроен для запуска только одной версии, но необходимые изменения не очевидны для меня.

http://www.postgresql.org/docs/9.1/interactive/server-start.html

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

Я думаю, что у меня установлено несколько серверов postgresql, как мне определить и удалить «лишние»?

Я подумал о написании скрипта для уничтожения сервера после завершения загрузки системы, но это кажется неэффективным. Есть ли более чистый способ отключить версию 9.1 при загрузке?

BitPusher16
источник

Ответы:

43

Для меньшего количества взлома отредактируйте /etc/postgresql/9.1/main/start.confи замените autoна manualили disabled.

ch2500
источник
Спасибо ch2500! Это решение интуитивно понятно и делает именно то, что мне нужно.
BitPusher16
Я искал такой ответ в течение нескольких часов. СПАСИБО огромное.
Джонатан Ванаско
10

Debian создал несколько скриптов (например, утилиты кластера pg_ *), чтобы упростить запуск нескольких версий или установок PostgreSQL на одном сервере, поэтому это не описано на postgresql.org.

Я не уверен, использует ли собственный .debпакет PostgreSQL тот же механизм запуска, что и Debian, но, глядя на пакет, который у меня есть, если вы создадите /etc/init.d/postgresql-9.1(даже если это пустой файл), то /etc/init.d/postgresqlпредположите, что вы хотите управлять этой версией отдельно и не будете запустить его по умолчанию. Вы все еще можете начать это с

service postgresql start 9.1

переопределить поиск версии.

DerfK
источник
Спасибо DerfK, это сработало. Я создал предложенный вами файл, поместил в него хэш-удар и сделал его исполняемым. Когда я перезагрузился, pg_lsclusters дал: Ver Cluster Port Status Owner Data directory Log file 9.1 main 5433 down postgres /var/lib/postgresql/9.1/main /var/log/postgresql/postgresql-9.1-main.log 9.3 main 5432 online postgres /var/lib/postgresql/9.3/main /var/log/postgresql/postgresql-9.3-main.log
BitPusher16
Пакеты от команды по пакетированию PostgreSQL Debian идентичны пакетам из Debian. Вы должны использовать кластерную инфраструктуру pg_ * вместо того, чтобы взламывать собственные сценарии запуска sysv init.
Майкл Реннер