Error de PostgreSQL 'No se pudo conectar al servidor: No existe tal archivo o directorio'

136

Al igual que otros, recibo este error cuando ejecuto rake db: migrar en mi proyecto o incluso probar la mayoría de las tareas de base de datos para mis aplicaciones Ruby on Rails 3.2.

PGError (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 "/tmp/.s.PGSQL.5432"?

Instalé PostgreSQL con Homebrew hace mucho tiempo y después de un intento de instalación de MongoDB recientemente, mi instalación de PostgreSQL nunca ha sido la misma. Estoy ejecutando OS X v10.6 Snow Leopard.

¿Qué hay de malo y cómo entiendo mejor cómo es y debe configurarse PostgreSQL en mi Mac?

Hasta ahora (creo) esto me dice que PostgreSQL no se está ejecutando (?).

ps -aef|grep postgres                                                                                                   (ruby-1.9.2-p320@jct-ana) (develop) 
  501 17604 11329   0   0:00.00 ttys001    0:00.00 grep postgres

¿Pero esto me dice que PostgreSQL se está ejecutando?

 launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist                                                        (ruby-1.9.2-p136) 
homebrew.mxcl.postgresql: Already loaded

¿Cómo puedo solucionar esto? que no estoy viendo

PD: ~/Library/LaunchAgentsincluye dos archivos .plist de PostgreSQL. No estoy seguro si eso es relevante.

org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

Intenté lo siguiente y obtuve un resultado como el siguiente.

$ psql -p 5432 -h localhost

psql: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (fe80::1) and accepting
    TCP/IP connections on port 5432?

He leído desde entonces que esto ocurre porque OS X instala su propia versión de PostgreSQL y Homebrew instala una versión diferente en un lugar diferente y los comandos de PostgreSQL están buscando en el directorio / tmp /. Tendrá que buscar más en Stack Overflow, pero básicamente hace un enlace simbólico a PostgreSQL para que cualquier cosa que se encuentre en esa ruta tmp encuentre la ruta real, si eso tiene sentido.

Este es el enlace donde encontré algunas cosas más para probar, específicamente haciendo el enlace simbólico según lo anterior, Mac OSX Lion Postgres no acepta conexiones en /tmp/.s.PGSQL.5432 . Todavía deseo que alguien reúna una explicación decente de los conceptos detrás de la instalación de PostgreSQL en OS X y por qué todo es tan difícil.

Últimas ideas para ayudar con la resolución de problemas:

$ which psql // This tells you which PostgreSQL you are using when you run $ psql. 

Entonces corre:

$ echo $PATH

Lo clave a tener en cuenta es esto:

Asegúrese de que la entrada de ruta para la copia de PostgreSQL que desea ejecutar VIENE ANTES de la ruta de acceso a PostgreSQL del sistema OS X.

Este es un requisito central que decide qué PostgreSQL se ejecuta y es lo que me dicen que conduce a la mayoría de estos problemas.

Evolucionar
fuente
¿Alguna vez encontraste una solución para esto? Veo que no has marcado uno. Ninguno de estos me ayuda tampoco.
Andras Gyomrey
Todavía es principalmente vudú y encarnaciones extrañas para que funcione. Acabo de agregar [Editar 2] arriba con un enlace con algunas sugerencias más y cómo hacer el enlace simbólico según mis comentarios de edición. Al final, el Symlink funcionó para mí, pero creo que también desinstalé y reinstalé postgres y homebrew a lo largo del camino, por lo que es difícil saber exactamente qué marcó la diferencia. Buena suerte. ¡Informe si descubre algo nuevo, con 15,000 visitas sobre esta pregunta, es algo que le causa dolor a mucha gente!
Evoluciona el
@AndrasGyomrey Acabo de regresar de RailsCamp15 en Australia y la gente dijo que una clave era acertar con el archivo de ruta, lo he editado en la Edición 3 anterior para explicar esto.
Evoluciona
Tenga en cuenta que launchctl que informa que algo está cargado NO significa necesariamente que esté funcionando. Debería echar un vistazo a bigsql.com como alternativa; funciona en Mac y tiene una buena interfaz de usuario de administración.
Jim Nasby

Respuestas:

102

Verifique que no haya postmaster.pid en su directorio de postgres, probablemente /usr/local/var/postgres/

elimine esto e inicie el servidor.

Verifique: https://github.com/mperham/lunchy es un excelente contenedor para launchctl.

Hass
fuente
3
Esto funcionó para mí. Acabo de instalar Yosemite y cargué postgres desde homebrew. Funcionó bien la primera vez que lo usé, pero tuve este problema después de un reinicio. Entonces, ¿puedes explicar por qué funcionó?
Dan Williams
2
funcionó para mí, pero para los novatos, alguien puede explicar por qué y qué tan seguro es esto
Alexander Mills
58

" Postgres.app " es una solución mejor si estás en OS X


Aquí está la solución:

  1. Detener la base de datos
  2. cd /var
  3. rm -r pgsql_socket
  4. ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. Reinicie PostgreSQL (no su computadora)

Hay más información disponible en " postgresql 9.0.3. En Lion Dev Preview 1 ".

josephmisiti
fuente
2
Errores para mí y esta solución no ayudó. Siento que estoy tropezando en una habitación oscura trabajando para comprender lo que realmente está sucediendo y un proceso para aplicar una solución yo mismo. ¿Podría explicarme cómo podría diagnosticar y solucionar este problema?
Evoluciona
Funciona para mi. Se siente un poco raro de vestir/tmp a _postgres, pero bueno :)
wrdevos
postgresapp funciona, pero ¿por qué no puedo iniciar mi servidor en la terminal? Después de salir de esta aplicación, el problema vuelve como se esperaba.
Hakunami
Esto funcionó para mí, pero tenga en cuenta que debe ser root o usar sudo para ejecutar # 2 - 4. Además, aclare el paso # 5: solo necesita reiniciar postgres, no la computadora.
mpelzsherman
2
Las letras mayúsculas no responden mejor. Todavía está perfectamente bien instalar y ejecutar Postgres a través de Homebrew (servicios).
Drenmi
55

Para mi esto funciona

rm /usr/local/var/postgres/postmaster.pid
tsunllly
fuente
9
En mi caso, después de eliminar el pid, necesitaba reiniciar postgresql conpg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Obromios
44
También tuve que reiniciar postgres, cuando homebrew lo instaló, puede hacerlo así:brew services restart postgresql
santuxus
2
Estoy en Docker env No such file or directoryen mi caso
Sarz
2
rm: /usr/local/var/postgres/postmaster.pid: No
existe
13

Esto funcionó para mí por el error que mencionaste. Haz uno de estos:

  1. Posiblemente cambie su puerto predeterminado especificado en el postgres.confarchivo, si ha utilizado algo distinto del puerto predeterminado 5432durante la instalación.

  2. Cambie el número de puerto postgresql.confy reinicie el servidor DB.

  3. En lugar de psqlescribir el comando completo:

    psql -p 5432 -h localhost   
    • nombre del servidor y el puerto no
solaimuruganv
fuente
1. Creo que mi instalación habría sido según los valores predeterminados.
Evoluciona el
2. Podría cambiar esto, ¿alguna implicación de cambiar el puerto?
Evoluciona el
3. Agregué mi salida de 3 arriba.
Evoluciona el
La opción 3 funcionaba con un puerto personalizado. Debido a que tengo múltiples servidores pg instalados (PostgreSQL 9.1, 9.2 y 9.3), también tuve que señalar el psql correcto.
gpasse
11

Si está ejecutando Homebrew, desinstale Postgresql end pg gems: *

$ gem uninstall pg
$ brew uninstall postgresql

Descargue y ejecute el siguiente script para corregir el permiso en / usr / local: * https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

Luego instale Postgres nuevamente y pg gem: *

$ brew install postgresql  
$ initdb /usr/local/var/postgres -E utf8

Para iniciar launch postgresql al iniciar sesión, ejecute:

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 

O comience manualmente.

Instalar gema pg

$ gem install pg

Espero haber ayudado

Fabricio
fuente
De brew info postgres:ARCHFLAGS="-arch x86_64" gem install pg
wrdevos
1
¿No eliminaría esto los registros en la base de datos?
kibaekr
initdb /usr/local/var/postgres -E utf8trabajos. Gracias un montón.
Chris Jeon
8

Tuve ese problema cuando actualicé Postgres a 9.3.x. La solución rápida para mí fue degradar a la versión 9.2.x que tenía antes (no es necesario instalar una nueva).

$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql

"¿ Homebrew instala una versión específica de la fórmula? " Ofrece una explicación mucho más completa junto con formas alternativas de solucionar el problema.

Silvenon
fuente
Gracias por la contribución y las instrucciones claras para repetir su solución. Ese enlace que incluyó seguro es completo, actualmente no tengo problemas con postgres, así que no estoy seguro de cuánto es útil para otros todavía, pero para cualquier otra persona si lo encuentra útil, comente aquí.
Evoluciona el
Lo encuentro útil y relevante, aunque quizás no directamente. Solucionó el problema simplemente cambiando las versiones, usando brew, que es una herramienta bastante común, y solo repitió los pasos, hasta ahora, genial, el enlace entra en más problemas específicos de brew, sin embargo, así puedo ver que cuestionas su valor en el contexto de la pregunta del PO.
wkhatch
7

Lo arreglé actualizando postgres.

brew update
brew upgrade

Luego tuve que actualizar también las bases de datos para que sean compatibles con la nueva versión principal, porque actualicé de 10 a 11.

brew postgresql-upgrade-database

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

Nelu
fuente
Recibí este error Error: ¡No hay instalada una versión de postgresql 9.3. *!
nourza
5

Entonces, para muchos de los problemas aquí, parece que las personas ya estaban ejecutando psql y tuvieron que eliminar postmaster.pid . Sin embargo, no tuve ese problema, ya que nunca había instalado correctamente los postgres en mi sistema.

Aquí hay una solución que funcionó para mí en MAC OSX Yosemite

  1. Fui a http://postgresapp.com/ y descargué la aplicación.
  2. Moví la aplicación a la aplicación / directorio
  3. Lo agregué a $ PATH agregando esto a .bashrc o .bash_profile o .zshrc: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. Ejecuté los postgres desde el directorio de aplicaciones y ejecuté el comando nuevamente y funcionó.

¡Espero que esto ayude! Toodles!

Además, esta respuesta me ayudó más: https://stackoverflow.com/a/21503349/3173748

superjisan
fuente
¿No apunta esto a la aplicación Postgres en lugar de a la instalación de cerveza? Eso puede te cortaré de entre algunos paquetes de votos (pgrouting por ejemplo, que no se puede instalar para la aplicación de Postgres que me ha causado dolor interminable y aquí estoy ahora)
allthesignals
4

Cuando ejecuta: psql -p 5432 -h localhost, no utiliza el controlador de bucle invertido, sino que utiliza un socket real y, por lo tanto, debe configurar postgres para aceptar conexiones de socket. Por lo tanto, aunque pgadmin y otros clientes pueden funcionar, psql no funcionará.

Debe cambiar tanto el archivo postgresql.conf como los archivos pg_hba.conf para permitir la conexión a través de un socket real. Esto también permitirá la conexión desde una IP remota, por lo que está deshabilitada de forma predeterminada.

Estos archivos están en el directorio de datos, pero la ubicación real puede ser diferente dependiendo de cómo se instaló Postgres. Con postgres en ejecución, ejecute el comando:

ps -ef | grep postmaster

Estos dos archivos son el directorio -D (quizás / usr / local / pgsql / data).

Para el archivo postgresql.conf, elimine el comentario de listen_address y cámbielo a:

listen_address = '*'

Para el pg_hba.conf agregue la línea:

host all all 0.0.0.0/0 md5
Oenpelli
fuente
2

Realmente no conozco Mac ni Homebrew, pero conozco muy bien PostgreSQL.

Desea averiguar dónde están los registros de PostgreSQL que intentan iniciarse y cuál es el directorio de socket para PostgreSQL. Por defecto, cuando crea PG, el directorio de socket es / tmp /. Si no cambió eso cuando compiló PG y luego inició PG, debería poder ver un archivo de socket en / tmp si lo hace: ls -al / tmp

El archivo de socket comienza con un ".", Por lo que no lo verá con '-a' a ls.

Si no ve un socket allí, y no ve nada de ps awux | grep postgres, entonces PG probablemente no se está ejecutando, o tal vez sí, y es el instalado por OSX. Lo que podría estar sucediendo es que podría estar teniendo un conflicto al escuchar en el puerto 5432 en localhost- use netstat -anp para ver qué, si es que hay algo, está escuchando en 5432. Si una Mac OSX PG ya está escuchando en ese puerto, entonces eso podría Se el problema.

Espero que ayude. He oído que homebrew puede hacer que las cosas sean un poco feas y muchas personas con las que he hablado fomentan el uso de una VM.

Stephen Frost
fuente
Gracias por contribuir en esto. Si le ayuda a obtener un poco más de información, homebrew simplemente ejecuta este script al instalar postgres. github.com/Homebrew/homebrew-core/blob/master/Formula/… Espero que le eches un vistazo y posiblemente compartas más ideas de lo que encuentres. Lo que creo que las personas necesitan es una forma más fácil de depurar por qué reciben este error para que sepan qué medidas tomar.
Evoluciona el
Según lo que puedo entender de ese script, hay un "postgres.log" en un directorio "var", posiblemente en HOMEBREW_PREFIX. Ese archivo de registro contendrá información sobre PG tratando de iniciarse (incluso si no pudo iniciarse por alguna razón). Aquí hay un mensaje de ejemplo que muestra que PG no se inicia debido a otro proceso que escucha en el puerto 5432:
Stephen Frost
2016-12-19 09: 11: 59.582 EST [20669] LOG: no se pudo vincular el zócalo IPv4: Dirección ya en uso 2016-12-19 09: 11: 59.582 EST [20669] SUGERENCIA: ¿Hay otro postmaster ejecutándose en el puerto 5432? ? Si no, espere unos segundos y vuelva a intentarlo. 2016-12-19 09: 11: 59.582 EST [20669] ADVERTENCIA: no se pudo crear el socket de escucha para "localhost" 2016-12-19 09: 11: 59.582 EST [20669] FATAL: no se pudo crear ningún conector TCP / IP 2016 -12-19 09: 11: 59.582 EST [20669] REGISTRO: el sistema de base de datos está cerrado
Stephen Frost
Además, parece que ese script no cambia el directorio de socket predeterminado, por lo que debería ser / tmp /. Puede buscar en el directorio de datos PG (que parece ser {HOMEBREW_PREFIX} / var / postgres) el archivo postgresql.conf y buscar "unix_socket_directories". Está comentado de forma predeterminada, pero tiene el conjunto predeterminado, por ejemplo:
Stephen Frost
#unix_socket_directories = '/ tmp' # lista de directorios separados por comas
Stephen Frost
2

Encontré este error al ejecutar en Mac 10.15.5 usando homebrew.

Hay un archivo llamado postmaster.pid que debe eliminarse automáticamente cuando sale postresql.

Si no hace lo siguiente

  • brew services stop postgresql <--- No se puede salir antes de que rm pueda corromper db
  • sudo rm /usr/local/var/postgres/postmaster.pid
RobKohr
fuente
1

Una razón por la que obtiene este error es que su base de datos local de postgres se cierra cuando reinicia su computadora. En una nueva ventana de terminal, simplemente escriba:

$psql -h localhost 

para reiniciar el servidor.

Pstrazzulla
fuente
1

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

1) Descargue 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

Tenía PostgreSQL 9.3 y obtuve el mismo error,

No se pudo conectar al servidor: Conexión rechazada ¿El servidor se está ejecutando en el host "localhost" (127.0.0.1) y acepta conexiones TCP / IP en el puerto 5432?

Lo arreglé usando:

chmod 777  /var/lib/pgsql/9.3/data/pg_hba.conf 
service postgresql-9.3 restart

Esto funciona para mi.

Mahesh Shitole
fuente
Este archivo no existe para mí
allthesignals
1

por lo que vale, experimenté este mismo error cuando tuve un error tipográfico (en md4lugar de md5) en mi pg_hba.confarchivo ( /etc/postgresql/9.5/main/pg_hba.conf)

Si llegaste aquí como lo hice yo, vuelve a verificar ese archivo una vez para asegurarte de que no haya nada ridículo allí.

Zach Lamberty
fuente
donde esta el pg_hba.confarchivo
bubakazouba
1
/etc/postgresql/{postgres_version}/main/pg_hba.conf
Aidan Melen
0

Puede haber diferentes problemas al ejecutar PostgreSQL localmente. Recomendaría limpiar todas las versiones de postgres instaladas y comenzar de nuevo. Una vez que lo tenga instalado, es muy fácil recrear su base de datos si tiene su proyecto de rieles actualizadodb/schema.rb

Así es como suelo instalar PostgreSQL en una Mac . Si está ejecutando su base de datos bajo el usuario raíz localmente, es posible que desee omitir el último paso que crea un todousuario

Alex Tamoykin
fuente
0

Una de las razones podría ser que

Unix_socket_directories en el archivo postgresql.conf no aparece en la lista del directorio que está buscando.

En el ejemplo de pregunta, está buscando el directorio / tmp, esto debe proporcionarse en el archivo postgresql.conf

algo como esto:

unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories

Esta solución funcionó para mí.

Kiran K Telukunta
fuente
0

Si estás en MacOS y estás usando homebrew, esta respuesta me pareció extremadamente útil:

https://stackoverflow.com/a/27708774/4062901

Para mí, mi servidor se estaba ejecutando, pero debido a una actualización, tuve problemas para conectarme (nota: uso los servicios de preparación). Si Postgres se está ejecutando, intente cat /usr/local/var/postgres/server.logver qué dicen los registros. Mi error fue una migración, no un problema de conexión.

También después de la migración manual que proponen (que funciona pero) descubrí que ya no había una tabla para mi usuario. Pruebe este comando para corregir eso: createdb(respondido a través de psql: FATAL: la base de datos "<usuario>" no existe )

rickrizzo
fuente
0

Simplemente reinicie Postgres tan pronto como aparezca el error al ejecutar brew services restart postgresqle intente nuevamente

Kanke
fuente
0

para mí el comando rm /usr/local/var/postgres/postmaster.pidno funcionó porque instalé una versión específica de postgresql con homebrew.

el comando es correcto rm /usr/local/var/postgres@10/postmaster.pid.

entonces brew services restart postgresql@10.

ZinkLu
fuente
-5

Es muy simple. Solo agregue host en su archivo database.yaml.

Ricardo - Nextv
fuente
host: 127.0.0.1 o host: localhost, por ejemplo.
Ricardo - Nextv
Todos aman una solución simple. Pero, ¿cómo funciona esto? Como he dicho en mis comentarios anteriores, buscar en esto me ha llevado por muchas rutas complejas. ¿Puede elaborar un poco y darnos un poco más de información sobre lo que realmente ve el problema y cómo este simple cambio aborda el problema? ¡Gracias por contribuir en este! :)
Evoluciona el
La diferencia es que con una conexión IP no hay que preocuparse de dónde se encuentra el archivo socket; en cambio te preocupas por la dirección IP.
Jim Nasby