Error de conexión a PostgreSQL en MAC

"psql: could not connect to server: No such file or directory".


El día de hoy, intenté conectarme al servidor PostgreSQL de mi Macbook Pro, a través de la herramienta de administración PhpPgAdmin, pero la autenticación resultaba fallida con cada intento que realizaba. Esto me pareció extraño y reinicié el servidor de base de datos desde la terminal:

      $ brew services restart postgresql
    

Volví a intentar acceder con mis credenciales, pero el problema continuaba. Entonces, intenté acceder directamente desde la terminal, para descartar que fuera un problema con la herramienta de administración:

      $ psql postgres
    

De este modo obtuve un mensaje con un mayor detalle sobre el problema: no se podía crear el archivo administra los procesos de PostgreSQL.

Detalle del error


  psql: could not connect to server: No such file or directory
	  Is the server running locally and accepting
	  connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

  
Otro mensaje de error similar

  FATAL: lock file “postmaster.pid” already exists

  

Explicación

Este es un problema común, que se genera cuando el computador se reinicia de manera inesperada, por ejemplo cuando se acaba la batería, si tienes problemas con el GPU o si simplemente realizas un reiniciado en duro al mantener presionado el botón de encendido.

Los problemas de bloqueo de procesos no sólo ocurren con PostgreSQL, sino también con otros softwares como MySql, Apache desde Xampp, entre otros que requieran de ser detenidos de manera correcta antes de apagar el computador.

Solución

Primero, detener el servidor de base de datos:

      $ brew services stop postgresql
    

Segundo, borrar el archivo “postmaster.pid” (modificar la ruta en base a tu instalación):

      $ rm /usr/local/var/postgres/postmaster.pid
    

Y finalmente, volver a iniciar el servidor PostgreSQL:

      $ brew services start postgresql
    

Esta es una solución rápida, pero si eres ultra paranoico y quieres estar seguro de que no se generará algún tipo de corrupción en tus bases de datos, lo mejor será que busques el proceso y lo detengas manualmente.

Para buscar el proceso puedes utilizar la siguiente instrucción (el número de la primera línea es el PID):

      $ cat /usr/local/var/postgres/postmaster.pid
    

Detener el proceso de manera simple o en algunos casos con nivel -3:

      $ kill PID
    

ó

      $ kill -3 PID