Конвенцията за PostgreSQL, пакетиран за Debian или производни на Debian като Ubuntu, е да се използва /var/run/postgresql
като директория за Unix домейн сокети. От друга страна, конвенцията за самостоятелно компилирани клиентски библиотеки на postgres е да се използва /tmp
, освен ако не е самостоятелно конфигуриран по друг начин.
Така че обичайната първопричина за това несъответствие между двете е комбинация от самостоятелно компилирани неща от страна на клиента с предварително компилирани пакети от страна на сървъра (дори ако клиентът и сървърът са инсталирани на една и съща машина, от страната на клиента и от страната на сървъра са все още различен и може да не е синхронизиран).
Меко свързване от /tmp
към тази директория, както е предложено от питащия работи, с изключение на това, че връзката ще се губи при всяко рестартиране, защото по принцип /tmp
се изпразва при рестартиране.
По-добър вариант би бил да добавите като запис в database.yml
:
-
или
host: /tmp
ако истинският път на сокета е/tmp
(самокомпилиран сървър, пакетиран клиент) -
или
host: /var/run/postgresql
ако истинският път на сокет/var/run/postgresql/
(опакован сървър, самокомпилиран клиент).
Когато стойността в полето за хост започва с наклонена черта, библиотеката на postgres знае, че това е местоположението на директория за локални сокети, а не име на хост. Името на файла в директорията .s.PGSQL.portnumber
се генерира и не трябва да се посочва, а само директорията.
Друга възможност е да конфигурирате самостоятелно компилираните софтуерни пакети възможно най-близо до Debian, като замените настройките по подразбиране, както те правят.