No se puede conectar al servidor de Postgres que se ejecuta a través de los servicios de elaboración

86

He estado buscando una solución para esto y no pude encontrar una solución que funcione.

Instalé postgres usando brew ( brew install postgres) en mi MacBook y actualmente lo estoy ejecutando usando brew services ( brew services list muestra postgres como un servicio en ejecución). Sin embargo, cuando intento ejecutar psql, obtengo el siguiente error.

psql: no se pudo conectar al servidor: no existe ese archivo o directorio. ¿El servidor se ejecuta localmente y acepta conexiones en el socket de dominio Unix "/tmp/.s.PGSQL.5432"?

¿Alguien ya ha resuelto un problema similar?

leo.fcx
fuente

Respuestas:

199

Tuve el mismo error y lo solucioné eliminando el archivo pid del proceso:

rm -f /usr/local/var/postgres/postmaster.pid

Wilson Silva
fuente
¡Gracias, funciona! ¿Pero por qué? ¿Cómo? ¿He ejecutado este comando después de cada reinicio?
rap-2-h
14
@ rap-2-h Parece que Postgres no se cierra correctamente. Tengo este problema cuando tengo que apagar mi Mac manteniendo presionado el botón de encendido.
Wilson Silva
6
Si usa un barril de una versión específica (ejemplo: [email protected]) asegúrese de usar la carpeta correcta en lugar de "/ postgres /"
Vjatseslav Gedrovits
1
De hecho, esto está relacionado con que macOS no cerró correctamente postgres, pero para mí, incluso sucedió cuando usé el menú de Apple + la opción "Apagar ...", por lo que no está específicamente relacionado con el apagado forzado (al menos ya, macOS 10.14.3). Esto lo solucionó, pulgar hacia arriba (y)
SidOfc
1
Si esto no funciona, inténtelo tail /usr/local/var/log/postgres.log. Esto puede brindarle más información sobre exactamente por qué falla postgres. Por lo general, puede publicar el mensaje de error de ese registro en Google y encontrar otra solución en StackOverflow :-D
edan
92

Hoy me encontré con este problema. postgres dejó de aceptar conexiones aunque homebrew pensó que se estaba ejecutando.

Para arreglarlo corrí

brew services restart -vvv postgresql

Salida de este comando,

==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)
==> Generated plist for postgresql:
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
   <dict>
     <key>KeepAlive</key>
     <true/>
     <key>Label</key>
     <string>homebrew.mxcl.postgresql</string>
     <key>ProgramArguments</key>
     <array>
       <string>/usr/local/opt/postgresql/bin/postgres</string>
       <string>-D</string>
       <string>/usr/local/var/postgres</string>
     </array>
     <key>RunAtLoad</key>
     <true/>
     <key>WorkingDirectory</key>
     <string>/usr/local</string>
     <key>StandardErrorPath</key>
     <string>/usr/local/var/log/postgres.log</string>
   </dict>
   </plist>

Luego pensé, hmm, tal vez haya algo en ese archivo de registro,

tail -n 10 /usr/local/var/log/postgres.log

Bastante seguro,

[4826] FATAL:  lock file "postmaster.pid" already exists
[4826] HINT:  Is another postmaster (PID 1489) running in data directory "/usr/local/var/postgres"?

Entonces, eliminé ese archivo

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

Y todo empezó a funcionar de nuevo.

Eric Conner
fuente
9
El comando más útil para mí fuetail -n 10 /usr/local/var/log/postgres.log
Nick Roz
41

En mi caso, el postmaster.pidarchivo ni siquiera estaba allí. Lo conseguí actualizando postgres.

brew update
brew upgrade

Luego, debido a que actualicé la versión principal de 10 a 11, también tuve que ejecutar esto:

brew postgresql-upgrade-database

(fuente https://github.com/facebook/react-native/issues/18760#issuecomment-410533581 )

Nelu
fuente
3
En estos casos, el /usr/local/var/log/postgres.logarchivo puede tener esto como los últimos registros: FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 12.2.
dijonkitchen
Tengo este problema exacto. La actualización de postgresql 11 a 12 falló, pero desinstalar e instalar nuevamente ayudó.
FooF
16

Combinaría las dos respuestas de Wilson y Grasshopper aquí.

Puede verificar el archivo plist para el servicio postgres usando brew services listpara encontrar la ubicación del archivo y simplemente abrirlo en su editor favorito.

Debería ver el valor de StandardErrorPathenumerado como:

<key>StandardErrorPath</key>
<string>/usr/local/var/log/postgres.log</string>

Y luego debe terminar el final del archivo de registro usando tail -n 100 /usr/local/var/log/postgres.log

En mi caso el error fue el siguiente:

2017-12-06 11: 51: 16.078 GMT [85476] FATAL: el archivo de bloqueo "postmaster.pid" ya existe 2017-12-06 11: 51: 16.078 GMT [85476] SUGERENCIA: ¿Hay otro administrador de correo (PID 601) ejecutándose en directorio de datos "/ usr / local / var / postgres"?

Esto se debió a que tuve que apagar mi Mac y postgres no tuvo la oportunidad de limpiar el archivo PID. Simplemente elimine el archivo PID rm /usr/local/var/postgres/postmaster.pide inicie postgresbrew services start postgresql

Una advertencia: no elimine este archivo PID a menos que esté seguro de que postgres no se está ejecutando . Puede hacer esto ejecutando brew services stop postgresqly luego esperando el resultado de brew services listpara mostrar que posgres está en el estado detenido.

real_ate
fuente
5

Lo que funcionó para mí fue eliminar la /usr/local/var/postgres/carpeta y luego desinstalar e instalar postgres nuevamente

António Ferreira
fuente
8
Debería probar otras respuestas antes de hacer esto.
Jean
3

Recibí el mismo error al instalar postgresql93 desde las versiones tap. Inspeccionando el archivo .plist indicado en la salida de brew services list( ~/Library/LaunchAgents/homebrew.mxcl.postgresql93.plist) encontré el siguiente mensaje:

FATAL: el directorio de datos "/ usr / local / var / postgres" tiene acceso grupal o mundial
DETALLE: Los permisos deben ser u = rwx (0700).

Lo que me llevó a esta respuesta: el directorio de datos "/ usr / local / var / postgres" tiene una propiedad incorrecta

Después de ejecutar sudo chmod -R 700 /usr/local/var/postgresrecibí un error diferente:

FATAL: no se pudo abrir el directorio "pg_tblspc": no existe ese archivo o directorio

Lo que luego me llevó a: `pg_tblspc` falta después de la instalación de la última versión de OS X (Yosemite o El Capitan)

Después de ejecutar mkdir /usr/local/var/postgres/pg_tblspc/el clúster se inició correctamente.

Saltamontes
fuente
3

En caso de que tenga instaladas varias versiones de postgresql. Los comandos mencionados a continuación harán el trabajo de eliminar el ID del proceso (pid) y reiniciarlo. Solo asegúrate de seleccionar la versión correcta.

rm -f /usr/local/var/[email protected]/postmaster.pid

brew services restart [email protected]   

Consulte también la respuesta de Eric Corner para confirmar si el problema es sobre "el archivo de bloqueo postmaster.pid ya existe" en el archivo de registro.

Dave
fuente
1

actualizarlo usando el comando

  brew postgresql-upgrade-database

si tiene el siguiente error , no se encuentra el comando 'brew', pero se puede instalar con: sudo apt install linuxbrew-wrapper

luego instálelo usando el comando

 sudo apt install linuxbrew-wrapper
Nadeem Qasmi
fuente
0

En mi propio caso, el postgres.logarchivo contiene esto. HINT: Is another postmaster already running on port 5432? If not, remove socket file "/tmp/.s.PGSQL.5432" and retry.Después de eliminar el archivo de socket y reiniciar, todo funcionó bien. Tenga en cuenta que este es un archivo oculto y no será visible a través del navegador de ventanas. La eliminación debe realizarse a través de la línea de comando.

El RealDuke
fuente
0

Es posible que esté viendo un conflicto de versiones libssl / libcrypto.

brew services start postgreslos registros no me dieron nada, pero comenzando manualmente pg_ctl -D /usr/local/var/postgres startapuntando a:

falta la definición _RAND_cleanup en /.../openssl/lib/libcrypto.1.0.0.dylib

Prueba con:

brew tap-new $USER/old-openssl
brew extract --version=1.0.2t openssl $USER/old-openssl
brew install openssl@1.0.2t

# and then either brew link [email protected] or symlink the required files to current openssl
ln -s /usr/local/Cellar/openssl/openssl@1.0.2t/lib/libcrypto.1.0.0.dylib /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib
ln -s /usr/local/Cellar/openssl/openssl@1.0.2t/lib/libssl.1.0.0.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Frank Kotsianas
fuente
0

En caso de que todas las demás respuestas no funcionen ...

Estaba viendo este mismo mensaje y la respuesta aceptada, corriendo

rm -f /usr/local/var/postgres/postmaster.pid

no funcionó. Tampoco

rm -f /usr/local/var/[email protected]/postmaster.pid después de recordar que tenía instalada una versión específica.

Hice una cat /usr/local/var/log/[email protected]y vi:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 1231) running in data directory "/usr/local/var/[email protected]"?
> ps aux|grep 1231
[...] /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/libexec/mobileassetd

** cara pensante **

Cerró el simulador de iOS. Postgres se reinició por sí solo.

Esto está en una computadora de escritorio y ayer se cortó la energía, por lo que, según las otras respuestas, sospecho que la causa principal es el cierre forzado sin darle la oportunidad de limpiar las cosas.

orden de busca y captura
fuente