[Ubuntu 16.04] Я установил postgresql 9.5 вместе с зависимостями:
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-common
sudo apt-get install postgresql-9.5 libpq-dev
Когда я хочу бежать, psql
я получаю:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Но /var/run/postgresql/
пусто. Когда я перезапускаю posgresql, все выглядит нормально:
$ /etc/init.d/postgresql restart
[ ok ] Restarting postgresql (via systemctl): postgresql.service.
$ /etc/init.d/postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since wto 2016-09-27 16:18:26 CEST; 1min 15s ago
Process: 3076 ExecReload=/bin/true (code=exited, status=0/SUCCESS)
Process: 3523 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 3523 (code=exited, status=0/SUCCESS)
но если проверить ps aux
есть не такой PID (почему ??)
Полная переустановка вообще не помогает. Как я могу это исправить?
postgresql
mike927
источник
источник
Ответы:
Это особенность интеграции systemd PostgreSQL в Xenial.
Служебный модуль postgresql, установленный пакетом postgresql-common, является всего лишь фиктивной службой, которая заставляет фактическую службу postgresql@9.6-main запускаться через зависимость. Вы можете увидеть эту зависимость, выполнив команду
Эта зависимость не является постоянной, но генерируется во время загрузки системы генератором systemd,
/lib/systemd/system-generators/postgresql-generator
который также поставляется с пакетом postgresql-common. Проверяет генератор ли режим запуска в файле/etc/postgresql/9.6/main/start.conf
установлен наauto
, и если да, то устанавливает зависимость , которая впоследствии приводит пример 9,6-главный должен быть запущен.(Точнее, он проверяет все подкаталоги конфигурации
/etc/postgresql/*/*
и создает зависимости для всех экземпляров, которые настроены для автоматического запуска, но при установке по умолчанию будет только один экземпляр.)Из-за ограничений генераторов systemd (см.
man systemd.generator
) Этот процесс может завершиться неудачей, что приведет к отсутствию зависимостей после перезагрузки. Затем Systemd запустит только фиктивный сервисв журнал, но в остальном ничего не делать. Попытка запустить службу вручную
будет просто воспроизвести этот результат. Выполнение команды
вручную от имени root перезапустит генератор и в большинстве случаев решит проблему до следующей перезагрузки.
Чтобы окончательно решить проблему, вам нужно найти причину сбоя генератора во время загрузки. Возможные причины можно найти на странице man systemd.generator. В моем случае это был файл конфигурации PostgreSQL,
/etc/postgresql/9.6/main/postgresql.conf
который был связан с другой файловой системой, которая еще не была доступна, когда генератор запускался рано во время загрузки.postgresql-generator
проверяет существование этого файла, хотя в противном случае он не нужен.источник
Обращаясь к ответу Тилмана, но недостаточно Kudos, чтобы комментировать ...
Если вам не требуется, чтобы служба называлась postgresql, и вам не нужны службы-пустышки, она должна работать только для непосредственного управления реальной службой. Это имя: postgresql@$version-$cluster.service В вашем случае это должно быть коротко postgresql-9.5-main . Хотел бы начать
и остановиться
Статус также даст вам гораздо лучшую и точную информацию, чем на автоматически сгенерированной службе оболочки.
Для 9.6 это выглядит так:
источник
В моем случае это было связано с неправильно настроенными локалями.
Я нашел решение в этом ответе dba.stackexchange.com :
sudo dpkg-reconfigure locales
для генерации необходимых локалейsudo pg_dropcluster 9.5 main
(это сотрет все данные в кластере!)sudo pg_createcluster 9.5 main --start
sudo service postgresql restart
источник
Было бы лучше использовать сценарии запуска systemd с Ubuntu 16.04, сценарии инициализации могут работать некорректно. Postgres 9.5 уже есть в репозиториях Ubuntu, поэтому попробуйте вместо этого запустить systemd.
источник
Еще один "укушен этим".
pg_upgradecluster
Фактически покинул целевую версию (9.6) в «ручном режиме» на порту 5433 и версии исходного (9.5) в порту 5432.Даже после
pg_dropcluster 9.5
. Редактирование файла start.conf не помогло, но намекнуло об этомsystemctl daemon-reload
, поскольку на основе этого файла конфигурации генератор решает, использовать ли символическую ссылку для служебного файла:Поэтому, если в кластере, который вы хотите запустить, нет слова «auto» в файле start.conf, вам необходимо выполнить перезагрузку системы (или перезагрузить компьютер), чтобы включить его во время загрузки.
Еще нужно проверить это с перезагрузкой, но, учитывая вышеизложенное, довольно уверен, что проблема была.
источник
Я отключил волшебный «супер сервис» вот так:
Затем я активировал конкретный сервис:
После перезагрузки все снова заработало.
источник
Была такая же ошибка, потраченные впустую часы, простое решение. Проверьте этот ТАК вопрос и мой ответ, который:
источник
У меня была эта проблема из-за другой причины: права доступа к каталогу. У меня был полный цикл CHMOD, как это:
Это устанавливает каталог как неисполняемый, что предотвращает его чтение postgres.
источник
У меня была такая же проблема при проверке найденной проблемы с разрешением ssl-cert-snakeoil.key.
Установить право собственности
chown root: ssl-cert ssl-cert-snakeoil.key chmod 640 ssl-cert-snakeoil.key
и сделал чистый перезапуск.
источник