Ошибка с 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