Конвенцията за 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, като замените настройките по подразбиране, както те правят.