Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Проблема с размещением сокета PostgreSQL в Unix

#сокет #postgresql


По умолчанию в Ubuntu сокет бд-сервера, очевидно, должен хранится в папке /var/run/postgresql,
однако при каждой установке он у меня оказывается в /tmp. Поэтому при обращения большинства
приложений (например Rails) к серверу появляется вот такая ошибка:
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"?

как мне переместить сокет в нужную папку, или переназначить системные переменные
чтобы искали его в другой папке?    


Ответы

Ответ 1



Проблема решена: в файле $PGDATA/postgresql.conf раскоментировать и инициализировать строку unix_socket_directory = '/var/run/postgresql/' + перезапуск сервера.

Ответ 2



postgresql.conf находится в директории /etc/postgresql/9.5/main 9.5 - версия БД, у Вас может отличаться.

Ответ 3



Kubuntu 18.04 Мне помогло копирование файлов из /etc/postgresql/10/main в /var/lib/postgresql/10/main сделать это можно только дав права на запись типа chmod 777 main с последующим возвратом к chmod 700, либо же под пользователем postgres. Обязательно посмотрите лог файл который в моем случае лежит в /var/lib/postgresql.

Ответ 4



Для исходного кода PostgreSQL по-умолчанию используется именно /tmp. Однако этот путь не прибит гвоздями, это константа в коде DEFAULT_PGSOCKET_DIR и некоторые сопровождающие пакетов предпочитают изменять путь на предпочтительный для дистрибьютива. В частности, пакеты для Ubuntu и Debian обычно собираются с изменением этого пути на /var/run/postgresql/. И это изменение не представляет каких-то проблем, но только пока ваши приложения использующую базу собраны с тем же самым DEFAULT_PGSOCKET_DIR. Если используемая в системе библиотека libpq была собрана с одним DEFAULT_PGSOCKET_DIR, а СУБД с другим - то вы будете получать такие ошибки. Поэтому лучше всего проверить, какие именно вы используете пакеты самой СУБД, а какие приложениями и libpq. Очевидно они собраны с разными настройками, возможно получены из разных репозиториев. Я как postgresql DBA рекомендую использовать штатные репозитории PostgreSQL Global Development Group Другая возможность, как уже верно отмечено, это сконфигурировать СУБД слушать сокет не по адресу с которым та была скомпилирована, а с указанным вручную. За это отвечает конфигурационная опция unix_socket_directories (вот тут можно заметить, что дефолтное значение и есть константа DEFAULT_PGSOCKET_DIR) Где находится сам конфигурационный файл postgresql.conf - вопрос отдельный и специфичен опять же для предпочтений того человека, кто собирал СУБД. Хоть это и не опции сборки (имя postgresql.conf захардкожено в путях), но размещается он в каталоге образно названным $PGDATA. То есть где угодно, лишь бы этот каталог был указан при инициализации и затем при каждом старте СУБД. А так же файл конфигурации может лежать где угодно если опцией запуска config_file указать путь к нему при запуске СУБД. В ubuntu и debian обычно раскладывают таким образом: - файлы конфигурации в /etc/postgresql/(номер major версии postgresql)/main - $PGDATA размещается по пути /var/lib/postgresql/(номер major версии postgresql)/main В CentOS же например $PGDATA размещается в /var/lib/pgsql/(номер major версии postgresql)/data, там же файл конфигурации. А вот если, как в вашем случае, имеет место несогласованное состояние установленных пакетов - то могут быть сюрпризы. Гарантированно узнать с какого конфигурационного файла PostgreSQL начал работу можно запросом show config_file; В ответ будет путь до файла конфигурации. Останется только привести опцию unix_socket_directories к виду unix_socket_directories = '/var/run/postgresql/' и перезапустить СУБД: unix_socket_directories может изменяться только при рестарте всей СУБД. PS: стоит ещё прокомментировать, что до выпуска 9.3 опция называлась unix_socket_directory. Современная unix_socket_directories допускает перечисление сразу нескольких директорий через запятую.

Комментариев нет:

Отправить комментарий