Ошибка с postgresql datababse: Является ли сервер запущенным локально и принимает соединения в соке домена Unix "/var/run/postgresql/.s.PGSQL.5432"?
Когда я запускаю rake db:migrate
или запускаю команду rails s
, я получаю ту же ошибку:
Error : 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"?
Я получаю сообщение об ошибке в браузере при попытке rails s
.
Это моя database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: 5
development:
<<: *default
database: books_development
test:
<<: *default
database: books_test
production:
<<: *default
database: books_production
username: abd
password: <%= ENV['BOOKS_DATABASE_PASSWORD'] %>
Примечание. У меня есть базы данных books_development
; books_test
; и postresql работают без проблем, когда я пытаюсь sudo /etc/init.d/postgresql start
Я запускал:
create database books_development;
create database books_test;
в консоли psql. И он сказал, что он успешно выполнил
Я пробовал много решений, и вчера провел поиск решения, и никакое решение в связанных вопросах не решило мою ошибку.
У меня есть postgresql-9.4 (последний) и xubuntu 14.04
Любые идеи?
Ответы
Ответ 1
Соглашение для PostgreSQL, упакованное для Debian или Debian, таких как Ubuntu, должно использовать /var/run/postgresql
как каталог для сокетов домена Unix. С другой стороны, конвенция для самокомпилированных клиентских библиотек postgres заключается в использовании /tmp
, если только не сконфигурирована в противном случае.
Таким образом, обычная первопричина этого несоответствия между ними - это сочетание самокомпилированных клиентских компонентов с предварительно скомпилированными серверными пакетами (даже если клиент и сервер установлены на одном компьютере, на стороне клиента и на сервере -side все еще различны и могут быть не синхронизированы).
Смягчение ссылок из /tmp
в этот каталог, как было предложено исследователем, за исключением того, что ссылка будет потеряна при каждой перезагрузке, поскольку в общем случае /tmp
освобождается при перезагрузке.
Лучший вариант - добавить в качестве записи в database.yml
:
-
либо host: /tmp
, если реальный путь к сокету /tmp
(самокомпилированный сервер, упакованный клиент)
-
или host: /var/run/postgresql
, если реальный путь сокета /var/run/postgresql/
(упакованный сервер, самокомпилированный клиент).
Когда значение в поле хоста начинается с символа косой черты, библиотека postgres знает, что это местоположение каталога для локальных сокетов, а не имя хоста. Имя файла внутри каталога .s.PGSQL.portnumber
сгенерировано и не должно указываться, только каталог.
Другая возможность - настроить самокомпилированные программные пакеты как можно ближе к Debian, переопределяя значения по умолчанию, как и они.
Ответ 2
У меня была такая же ошибка Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
при вводе psql
в пользователя postgres в Ubuntu 14.04. Я не мог найти существующее рабочее решение.
Короткий ответ для меня: моя установка сделала каталог var/pgsql_socket
, но никакие файлы конфигурации не знали об этом.
1) Найдите файл postgres.conf
(он был в etc/postgresql/9.6/main
для меня)
2) измените на listen_addresses = '*'
3) добавьте еще один каталог сокетов unix
unix_socket_directories = '/var/run/postgresql, /var/pgsql_socket' # comma-separated list of directories
4) на этом этапе началось попытку запуска sugo service postgresql, но у него не было полномочий на создание файла блокировки.
* The PostgreSQL server failed to start. Please check the log output:
2016-10-05 17:14:55 CEST [28472-1] FATAL: could not create lock file "/var/pgsql_socket/.s.PGSQL.5432.lock": Permission denied
2016-10-05 17:14:55 CEST [28472-2] LOG: database system is shut down
5) Изменить разрешения (найдено из комментарий Марка Берри здесь)
$ sudo chown root.postgres /var/pgsql_socket
$ sudo chmod g+wx /var/pgsql_socket
6) sudo service postgresql start
sudo -i -u postgres
psql
Это, наконец, сработало для меня
Ответ 3
Я решил это. Я просто создал softlink, используя:
sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
а затем отредактировал
/etc/postgresql/9.4/main/pg_hba.conf
(Если у вас есть другая версия postgresql, вам нужно изменить 9.4 в пути)
От:
local all postgres peer
To:
local all postgres md5
Ответ 4
Решение:
Попробуйте это
export LC_ALL="en_US.UTF-8"
и это. ( 9.3 - моя текущая версия PostgreSQL. Напишите свою версию!)
sudo pg_createcluster 9.3 main --start
Ответ 5
Точный же симптом может быть вызван файлом незаполненного замка /var/run/postgresql/.s.PGSQL.5432.lock
. Одним из симптомов этого является psql
отчетность
psql: не удалось подключиться к серверу: нет такого файла или каталога Сервер работает локально и принимает подключения к домену Unix "/var/run/postgresql/.s.PGSQL.5432"?
хотя есть явно сокет с этим путем, доступным, как сообщается netstat -lp --protocol=unix | grep postgres
Проблема может быть решена путем удаления файла блокировки и перезапуска postgresql. Это определенно менее инвазивно, чем чистка и переустановка.
sudo rm /var/run/postgresql/.s.PGSQL.5432.lock
sudo service postgresql restart
Ответ 6
Когда я сталкиваюсь с этой ошибкой, мой сервер postgres активно прослушивал другой порт (5433).
Чтобы решить эту проблему, добавьте строку в свой файл database.yml, чтобы указать, что рельсы используют то же самое:
port: 5433