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

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

Кажется, у меня как-то есть несколько установок postgresql на моей машине. Я не уверен, что это ошибка, или Ubuntu по какой-то странной причине дублирует директории и хранит их где-то еще.

У меня есть каталог postgresql в /etc

один в /usr/lib

и один в /opt

Я правильно запутался на этом этапе.

Как мне удалить лишние?
Какие из них он лишний?
Мне также нужно убедиться, что мой драгоценный камень pg в моем rails env указывает на правильный сервер базы данных posgresql.

Любые мысли по моей проблеме были бы огромными.

Может возникнуть некоторая путаница в том, что люди подразумевают под установкой.

  • В /etc/postgresql/ Папка - это папка конфигурации для ваших кластеров.
  • В /var/lib/postgresql/ папка предназначена для данных.
  • Бинарные файлы программы для каждой версии находятся в отдельных папках, обычно в /usr/lib/postgresql/.

Я действительно не знаю о /opt/postgresql поскольку у меня этого нет. Но /opt предназначен для «необязательных» двоичных файлов, поэтому возможно, что ваша установка находится здесь, а не/usr/lib/postgresql/.

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

Если вы хотите посмотреть, что у вас установлено, это может помочь:

Как устроен postgresql:

Чтобы сделать вещи немного понятнее, postgres имеет следующую структуру:

  • Версия буквально означает, какая версия двоичных файлов программы postgresql. В каждой установленной версии может быть установлен кластер под этой версией. В противном случае эта версия фактически бездействует, поскольку не имеет данных или связанного с ней работающего сервера.

  • Под каждой версией может быть несколько кластеров. Вы можете представить кластер как работающий сервер (процесс) prostgres. Каждый кластер должен иметь свой собственный файл порта / сокета, к которому клиенты могут подключаться. Каждый кластер будет управляться одной версией.

  • Внутри каждого кластера будет несколько баз данных. Когда клиент подключается, он выбирает БД для подключения. Он может попросить изменить, к какой БД он подключен, не открывая новый сеанс, но он может быть подключен только к одному.

Что у вас установлено?

Чтобы узнать, какие версии установлены, вы можете посмотреть dpkg и apt. Вы должны иметь возможность удалять версии, используя apt и dpkg, но будьте очень осторожны, чтобы не делать этого, пока не проверите, какие кластеры находятся под каждой версией.

Чтобы узнать, какие у вас кластеры, используйте команду pg_lsclusters. Когда я назову это, я получаю следующее, вы получите нечто иное:

Version Cluster   Port Status Owner      Data directory                     Log file
9.1     main      5432 online <unknown>  /var/lib/postgres/data/9.1/main    /var/log/postgresql/postgresql-9.1-main.log

Обратите особое внимание на столбец «Статус». Если кластер не подключен к сети, это просто данные на диске, которые ничего не делают. Если он в сети, значит, он работает.

Как объединить кластеры?

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

Как удалить кластер, который больше не используется?

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

  • Использовать pg_ctlcluster <version> <cluster> stop чтобы остановить кластер.

  • Удалите папку с данными и, возможно, файл журнала.

  • Наконец удалите данные и config. Папка данных должна быть /var/lib/postgres/data/<version>/<cluster> но проверьте вывод pg_lsclusters чтобы убедиться в этом. Конфигурация для кластера: все кластеры будут иметь свою собственную папку конфигурации в
    /etc/postgresql/<version>/<cluser>/.

Почему вы получили несколько кластеров, если никогда не просили их?

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

Вы можете использовать dpkg -S, чтобы узнать, к какому пакету принадлежит данный каталог. Это позволило бы вам увидеть, принадлежат ли каталоги к разным пакетам.