psql: no se pudo conectar al servidor: no existe tal archivo o directorio (Mac OS X)

247

Al reiniciar mi Mac, recibí el temido error de Postgres:

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

La razón por la que esto sucedió es porque mi macbook se congeló por completo debido a un problema no relacionado y tuve que reiniciar con el botón de encendido. Después de reiniciar no pude iniciar Postgres debido a este error.

Dragón de fuego
fuente
1
Como verificación de la cordura, asegúrese de tener PG funcionando en su máquina
Jbur43
1
Cuando dejes la respuesta, intenta explicar POR QUÉ esto está sucediendo o cómo funciona el sistema Postgres para que no todos estemos intentando cosas al azar.
Nick Res
66
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 funcionó para mí
Derk Jan Speelman
brew reinstalar postgresql esto resolvió mi problema
Ajay Kumar

Respuestas:

421

ADVERTENCIA: Si elimina postmaster.pid sin asegurarse de que realmente no hay postgresprocesos en ejecución, podría dañar permanentemente su base de datos . (PostgreSQL debería eliminarlo automáticamente si el postmaster ha salido).

SOLUCIÓN: Esto solucionó el problema. ¡Eliminé este archivo y luego todo funcionó!

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

-

y así es como descubrí por qué esto necesitaba ser eliminado.

  1. Usé el siguiente comando para ver si había algún proceso PG ejecutándose. para mí no había ninguno, ni siquiera podía iniciar el servidor PG:

    ps auxw | grep post
  2. Busqué el archivo .s.PGSQL.5432 que estaba en el mensaje de error anterior. utilicé el siguiente comando:

    sudo find / -name .s.PGSQL.5432 -ls

    esto no mostró nada después de buscar en toda mi computadora, por lo que el archivo no existía, pero obviamente psql"lo quería" o "pensó que estaba allí".

  3. Eché un vistazo a los registros de mi servidor y vi el siguiente error:

    cat /usr/local/var/postgres/server.log

    Al final del registro del servidor veo el siguiente error:

    FATAL:  pre-existing shared memory block (key 5432001, ID 65538) is still in use
    HINT:  If you're sure there are no old server processes still running, remove the shared memory block or just delete the file "postmaster.pid".
    
  4. Siguiendo los consejos del mensaje de error, eliminé el archivo postmaster.pid en el mismo directorio que server.log. Esto resolvió el problema y pude reiniciar.

Entonces, parece que mi macbook se congeló y se reinició por completo, lo que hizo que Postgres pensara que sus procesos aún se estaban ejecutando incluso después del reinicio. Eliminando este archivo resuelto. Espero que esto ayude a los demás! Mucha gente tiene problemas similares, pero la mayoría de las respuestas tenían que ver con los permisos de archivos, mientras que en mi caso las cosas eran diferentes.

Dragón de fuego
fuente
99
espero que esta respuesta termine ayudando a alguien más, y gracias a la persona que lo votó. a pesar del moderador que marcó esta pregunta como un duplicado, es única y útil. gracias desbordamiento de pila por el increíble sitio y los expertos aquí para compartir!
FireDragon
2
Solo FWIW, eliminar postmaster.pid es peligroso, debes estar realmente seguro de que no hay postgresprocesos en ejecución antes de hacerlo.
Craig Ringer
21
Gran respuesta. ¡Gracias por publicar todo su proceso en lugar de solo el comando potencialmente destructivo!
dojosto
3
Convenido. La respuesta sobre postmaster.pid es buena, pero cada paso del proceso de averiguar si / donde se está ejecutando postgres es invaluable . ¡Gracias!
Clinton
11
Mi postgres log in macos estaba en /usr/local/var/log/postgres.log.
Ryan Tuck
172

Nada de lo anterior funcionó para mí. Tuve que reinstalar Postgres de la siguiente manera:

  • Desinstalar postgresql con brew: brew uninstall postgresql
  • brew doctor (arregla lo que sea que esté aquí)
  • brew cleanup
  • Eliminar todas las carpetas de Postgres:

    • rm -r /usr/local/var/postgres
    • rm -r /Users/<username>/Library/Application\ Support/Postgres
  • Vuelva a instalar postgresql con brew: brew install postgresql

  • Iniciar servidor: brew services start postgresql
  • Ahora debería tener que crear sus bases de datos ... ( createdb)
ypicard
fuente
44
Funcionó para mí, sin embargo, no tuve que eliminar una base de datos real y no tenía una carpeta en Soporte de aplicaciones. Creo que el punto era que algunos elementos de preparación tenían enlaces simbólicos rotos al instalar postgres. Solucionarlos e instalar postgres nuevamente resolvió el problema. ¡Gracias!
Kulbi
2
Ni esto ni la respuesta principal funcionaron para mí, hasta que también corríbrew postgresql-upgrade-database
ErikAGriffin
Esto funcionó para mí, excepto que no tuve que eliminar los datos antiguos.
Amal Antony
Para confirmar: esto elimina todas sus bases de datos, ¿correcto? Pude sobrevivir con solo un brew reinstall postgres, confirmando que el último número de versión principal de Homebrew Postgres era el mismo que mi número actual (roto).
Jacob Ford
85

Si está en macOS e instaló postgres a través de homebrew, intente reiniciarlo con

brew services restart postgresql

Si está en Ubuntu, puede reiniciarlo con cualquiera de estos comandos

sudo service postgresql restart

sudo /etc/init.d/postgresql restart
Jagdish Barabari
fuente
34

Tal vez esto no esté relacionado, pero aparece un error similar cuando actualiza postgresa una versión principal usando brew; usando brew info postgresqldescubrió esto que ayudó:

To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
Loco barney
fuente
44
Esto funcionó para mí al pasar del 11 al 12 en Catalina
nzajt
1
También funcionó para mí
muros vacíos el
15

Aquí está mi camino:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm /usr/local/var/postgres/postmaster.pid
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
smartworld-dm
fuente
1
Esto funcionó para mí cuando no se realizó ninguna otra detención e inicio / reinicio / reinstalación de Postgres usando homebrew. Gracias @ smartworld-dm
Bradley
1
Esta es la alma a la que siempre vuelvo. Podría agregar un alias que cuando lo ejecute fix-my-postgresqlejecutará esto :)
Tomas K
1
¿Alguna idea de por qué tengo que hacer esto cada vez que reinicio mi PC?
stephano
11

si postmaster.pidse ha ido y no puede reiniciar ni nada, haga esto:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

como se explica aquí inicialmente

Antoine
fuente
8

Hola mundo :)
La mejor pero extraña forma para mí era hacer lo siguiente.

1) Descargar postgres93.app u otra versión. Agregue esta aplicación a la carpeta / Aplicaciones /.

2) Agregue una fila (comando) en el archivo .bash_profile(que está en mi directorio de inicio):

export PATH = / Applications / Postgres93.app / Contents / MacOS / bin /: $ PATH
Es un CAMINO a psqlpartir de Postgres93.app. La fila (comando) se ejecuta cada vez que se inicia la consola.

3) Ejecutar Postgres93.appdesde la /Applications/carpeta. Inicia un servidor local (el puerto es "5432" y el host es "localhost").

4) ¡ Después de todas estas manipulaciones me alegré de ejecutar $ createuser -SRDP user_namey otros comandos y ver que funcionó! Postgres93.apppuede ejecutarse cada vez que se inicia su sistema.

5) Además, si desea ver sus bases de datos gráficamente, debe instalarlas PG Commander.app. Es una buena manera de ver su base de datos postgres como bonitas tablas de datos

Por supuesto, es útil solo para el servidor local. Me alegrará si estas instrucciones ayudan a otros que se han enfrentado a este problema.

crazzyaka
fuente
1
La clave aquí es agregar Postgres a su ruta (paso 2). Eso me ayudo. Si instaló Postgres usando Homebrew, puede agregarlo a su ruta agregando la siguiente línea a su .bash_profile: export PATH='/usr/local/Cellar/postgresql/9.4.1/bin/':$PATH- Tenga en cuenta que su número de versión puede ser diferente.
Tina
7

Este problema tiene muchas fuentes y, por lo tanto, muchas respuestas. He experimentado cada uno de ellos.

1) Si tiene un bloqueo de algún tipo, probablemente sea necesario eliminar el archivo /usr/local/var/postgres/postmaster.pid ya que es posible que postgres no lo haya manejado correctamente. Pero asegúrese de que no se esté ejecutando ningún proceso.

2) Craig Ringer ha señalado en otras publicaciones que el paquete de postgreSQL de Apple conduce a problemas de instalación de gemas pg Establecer la variable de entorno PATH es una solución.

3) Otra solución es desinstalar y reinstalar la gema. También puede ser necesaria una actualización de preparación.

Si te topas con esta publicación, si puedes identificar una de las fuentes, ahorrarás tiempo ...

Jerome
fuente
3
Me alegro de haber publicado esto. Otro colapso y la respuesta se puede recuperar bastante rápido ...
Jerome
6

Para mí, la solución fue simplemente reiniciar mi computadora. Primero intenté reiniciar con los servicios Brew y cuando eso no funcionó, reiniciar parecía ser la siguiente mejor opción para probar antes de buscar algunas de las soluciones más complicadas. Todo funcionó como debería después.

Matt Lemieux
fuente
5

Estaba enfrentando un problema similar aquí. Resolví este problema de la siguiente manera.

En realidad, el proceso de postgres está inactivo, para ver el estado de postgres ejecuta el siguiente comando

sudo /etc/init.d/postgres status

Dirá que el proceso está muerto, solo comience el proceso

sudo /etc/init.d/postgres start
Jagdish Barabari
fuente
Gracias por la respuesta, su respuesta me ayudó a resolver el mismo problema con algunas modificaciones: sudo /etc/init.d/postgresql start
Pravitha V
4

Esto me sucedió después de que mi Mac (High Sierra) se congeló y tuve que reiniciarlo manualmente (presione y mantenga presionado el botón de encendido). Todo lo que tuve que hacer para solucionarlo fue reiniciar de forma limpia.

skwidbreth
fuente
3

Mi problema terminó siendo que estaba usando Gas Mask (un administrador de archivos de hosts para Mac), y no tenía una entrada para localhost en el archivo de hosts que estaba usando.

Yo añadí:

127.0.0.1 localhost

Y eso resolvió mi problema.

jawns317
fuente
3

No estoy completamente seguro de por qué, pero mi instalación de Postgres se atornilló un poco y se eliminaron algunos archivos, lo que provocó el error que muestra OP.

A pesar de que puedo ejecutar comandos como brew service retart postgresy ver los mensajes adecuados, este error persistió.

Revisé la documentación de postgres y descubrí que mi archivo /usr/local/var/postgresestaba totalmente vacío. Entonces ejecuté lo siguiente:

initdb /usr/local/var/postgres

Parece que algunas configuraciones tuvieron lugar con ese comando.

Luego me pidió que ejecutara esto:

postgres -D /usr/local/var/postgres

Y eso me dijo que ya existe un archivo postmaster.pid.

Solo necesitaba saber si brew podría recoger las configuraciones que acabo de ejecutar, así que lo probé.

ls /usr/local/var/postgres

Eso me mostró un archivo postmaster.pid. Entonces lo hice brew services stop postgresql, y el archivo postmaster.pid desapareció. Luego lo hice brew services start postgresql, y VIOLA, el archivo reapareció.

Luego seguí adelante y ejecuté mi aplicación, que de hecho encontró el servidor, sin embargo, mis bases de datos parecen haber desaparecido.

Aunque sé que puede que no se hayan ido para nada, la nueva inicialización que hice puede haber creado un nuevo data_area, y el antiguo no está siendo señalado. Tendría que mirar dónde está y señalarlo nuevamente o simplemente crear mis bases de datos nuevamente.

¡Espero que esto ayude! Leer los documentos de postgres me ayudó mucho. Odio leer respuestas que son como "¡Pegar esto funciona!" porque no sé qué demonios está pasando y por qué.

Nick Res
fuente
2

Las causas de este error son muchas, así que primero ubique su archivo de registro y verifique si hay pistas. Puede ser que sea en /usr/local/var/log/postgres.logo /usr/local/var/postgres/server.log, o posiblemente en otros lugares. Si instaló con Homebrew, puede encontrar la ubicación en ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist.

Tamlyn
fuente
2

Tuve el mismo problema. La mayoría de las veces, el problema es el hecho de que hay un archivo sobrante

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

que funciona para la mayoría de las personas, pero mi caso fue diferente: intenté buscar en Google este problema durante las últimas 3 horas, desinstalé postresql en OSX a través de brew, purgué la base de datos, nada funcionó.

Finalmente, noté que tenía un problema con brew que cada vez que intentaba instalar algo, aparecía:

Error: Permission denied @ rb_sysopen - /private/tmp/github_api_....

o algo así al final de una instalación.

¡Simplemente lo hice sudo chmod -R 777 /private/tmpy finalmente funciona!

Estoy escribiendo esto porque podría ser una solución para otra persona

Maciej Pk
fuente
1

Vaya /var/log/ y ejecute cat postgres.log Aquí encontrará la razón del fracaso de postgres. Si se trata de un apagado inteligente, entonces probablemente su icu4cversión (biblioteca C ++ para Unicode) no sea correcta y esté vinculada postgres. Entonces ejecute los siguientes comandos.

brew upgrade brew cleanup Esto debería funcionar ;)

Shishir
fuente
Puede tener que correr brew styledespués si se brew cleanuprompe Homebrew.
olliezhu
0

He tenido que buscar esta publicación varias veces para resolver este problema. Hay otra solución, que también se aplica a problemas similares con otros programas en ejecución.

Acabo de descubrir que puedes usar los siguientes dos comandos.

$ top

Esto mostrará todas las acciones que se ejecutan actualmente con sus números pid. Cuando encuentre postgres y el pid asociado

$ kill pid_number

cohart
fuente
0

Acabo de recibir el mismo problema que he puesto mi máquina ( ubuntu) para actualizar y obtuve el siguiente error:

no se pudo conectar al servidor: No existe tal archivo o directorio ¿El servidor se ejecuta localmente y acepta conexiones en el socket de dominio Unix "/var/run/postgresql/.s.PGSQL.5432"?

Después de completar el proceso de actualización cuando reinicio mi error del sistema desapareció. Y funciona como un encanto como antes ... Supongo que esto sucedió cuando pg se estaba actualizando y comenzó otro proceso.

Gagan Gami
fuente
0

ALERTA DE SÚPER NOVEDAD: solo estoy aprendiendo desarrollo web y el tutorial particular que seguí mencionó que tengo que instalar Postgres pero en realidad no mencioné que tengo que ejecutarlo también ... Una vez que abrí la aplicación Postgres todo estaba bien y dandy.

Lorenzo
fuente
0

La respuesta de @Jagdish Barabari me dio la pista que necesitaba para resolver esto. Resulta que había dos versiones de postgresql instaladas mientras solo se estaba ejecutando una. La depuración de todos los archivos postgresql y la reinstalación de la última versión me resolvieron este problema.

5280 Ángel
fuente
0

Eliminé / usr / lib de LD_LIBRARY_PATH y funcionó. Estaba trabajando en dockerfile postgres: alpine.

ddtraveller
fuente