Кажется, у меня как-то есть несколько установок 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, чтобы узнать, к какому пакету принадлежит данный каталог. Это позволило бы вам увидеть, принадлежат ли каталоги к разным пакетам.