Я думаю, что у меня установлено несколько серверов postgresql, как мне определить и удалить "лишние"?
Кажется, у меня есть несколько установок postgresql на моей машине. Я не уверен, является ли это ошибкой или, если Ubuntu по какой-то странной причине дублирует директории и хранит их в другом месте. У меня есть каталог postgresql в /etc
один в /usr/lib
и один в / опт
Я правильно запутался в этой точке. Как мне удалить лишние. Какие из них лишние? Я также должен убедиться, что мой драгоценный камень 'pg' в моей среде rails указывает на правильный сервер posgresql db.
Любые мысли по моей проблеме были бы огромными.
2 ответа
Может быть некоторая путаница по поводу того, что люди подразумевают под закапыванием. /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
остановить кластер.Удалите папку данных и, необязательно, файл журнала.
Наконец удалите данные и конфиг. Папка данных должна быть
/var/lib/postgres/data/<version>/<cluster>
но проверьте выводpg_lsclusters
чтобы быть уверенным в этом. Конфигурация для кластера: все кластеры будут иметь свою собственную папку конфигурации в/etc/postgresql/<version>/<cluser>/
,
Почему вы получили несколько кластеров, если вы никогда не просили их?
Обычно вам нужно специально запросить создание кластера, чтобы получить новый. Единственное исключение из этого - когда вы обновляете кластер, он эффективно создает новый и оставляет старый на месте.
Вы можете использовать dpkg -S, чтобы увидеть, какому пакету принадлежит данный каталог. Это позволило бы вам увидеть, принадлежат ли каталоги различным пакетам.