La convención para PostgreSQL empaquetado para Debian o derivados de Debian como Ubuntu es usar /var/run/postgresql
como el directorio para los sockets de dominio de Unix. Por otro lado, la convención para librerías de cliente postgres autocompiladas es usar /tmp
, a menos que se haya configurado de otra manera.
Por lo tanto, la causa raíz habitual de esta discrepancia entre ambos es una combinación de cosas del lado del cliente autocompiladas con paquetes del lado del servidor precompilados (incluso si el cliente y el servidor están instalados en la misma máquina, el lado del cliente y el lado del servidor son sigue siendo distinto y puede no estar sincronizado).
Enlace suave desde /tmp
a este directorio como sugiere el autor de la pregunta funciona, excepto que el enlace se perderá en cada reinicio, porque en general /tmp
se vacía al reiniciar.
Una mejor opción sería agregar como entrada en database.yml
:
-
ya sea
host: /tmp
si la ruta del socket real es/tmp
(servidor autocompilado, cliente empaquetado) -
o
host: /var/run/postgresql
si la ruta del socket real/var/run/postgresql/
(servidor empaquetado, cliente autocompilado).
Cuando el valor en el campo de host comienza con una barra inclinada, la biblioteca de postgres sabe que es la ubicación de un directorio para sockets locales en lugar de un nombre de host. El nombre del archivo dentro del directorio .s.PGSQL.portnumber
se genera y no se debe especificar, solo el directorio.
Otra posibilidad es configurar los paquetes de software autocompilados lo más cerca posible de Debian, anulando los valores predeterminados mientras lo hacen.