sql >> Base de Datos >  >> RDS >> PostgreSQL

error con base de datos postgresql:¿El servidor se ejecuta localmente y acepta conexiones en el socket de dominio Unix /var/run/postgresql/.s.PGSQL.5432?

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.