PostgreSQL se ejecuta localmente pero no puedo conectarme. ¿Por qué?

32

Recientemente actualicé mi máquina de Mac OS X Lion (10.7.4) a Mountain Lion (10.8) y creo que ha borrado mi instalación de PostgreSQL. Fue instalado originalmente a través de Homebrew. No soy un DBA, pero espero que alguien pueda decirme cómo solucionar esto.

No puedo conectarme (pero antes pude antes de Mountain Lion):

$ psql -U rails -d myapp_development
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Pero Postgres todavía se está ejecutando claramente:

$ ps aux | grep postgres
meltemi          2010   0.0  0.0  2444124   5292   ??  Ss   Wed01PM   0:00.02 postgres: rails myapp_development [local] idle    
meltemi           562   0.0  0.0  2439312    592   ??  Ss   Wed12PM   0:02.28 postgres: stats collector process       
meltemi           561   0.0  0.0  2443228   1832   ??  Ss   Wed12PM   0:01.57 postgres: autovacuum launcher process       
meltemi           560   0.0  0.0  2443096    596   ??  Ss   Wed12PM   0:02.89 postgres: wal writer process       
meltemi           559   0.0  0.0  2443096   1072   ??  Ss   Wed12PM   0:04.01 postgres: writer process       
meltemi           466   0.0  0.0  2443096   3728   ??  S    Wed12PM   0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log

Y está respondiendo a consultas (tanto de una base de datos de prueba como de la base de datos de desarrollo) de una aplicación Rails local

  User Load (0.2ms)  SELECT "users".* FROM "users" 
  Rendered users/index.html.haml within layouts/application (1.3ms)

Parece que no hay /var/pgsql_socket/directorio, y mucho menos el /var/pgsql_socket/.s.PGSQL.5432archivo de socket mencionado anteriormente. ¿Quizás la instalación de Mountain Lion eliminó eso?

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt

¿Cómo puedo solucionar esto?

Meltemi
fuente
No es un administrador de postgres, pero un archivo de socket faltante parece correcto. Cree el directorio / var / pgsql_socket (con el usuario con permisos de escritura) y reinicie el servidor. A ver si eso lo soluciona
Derek Downey
Pregunta relacionada sobre SO . Parece que Apple no hizo un gran trabajo con la actualización.
Erwin Brandstetter
¿Hay alguna mención de un archivo de socket que se está creando en el archivo de registro /usr/local/var/postgres/server.log?
Philᵀᴹ
@ErwinBrandstetter ¿Cómo espera que Apple haga un "buen trabajo" de actualización de aplicaciones de terceros * nix instaladas manualmente?
Philᵀᴹ
@ Phil- sin mención. Estoy empezando a pensar que esto podría ser un problema de ruta variable. ¡Creo que mi $PATHcambio con la actualización /usr/binestá por delante /usr/local/biny creo que Mountain Lion puede venir con PostgreSQL preinstalado! Investigando ...
Meltemi

Respuestas:

30

Descubrí que tenía un problema extremadamente similar, es decir, que postgres estaba abriendo un socket en el /var/pgsql_socket_altque ninguno de mi software espera verse, pero la solución a mi problema no era solo un problema con mi $PATH.

Tuve que crear el directorio /var/pgsql_socket, Chown a mí mismo, y el conjunto unix_socket_directoryde postgresql.conf(ubicado en /usr/local/var/postgres) a ese directorio, a continuación, utilizar el pg_ctlbinario en /usr/local/binpara iniciar el servidor postgres derecho con éxito (que es donde $PATHentra en juego - Asegúrese de que which pg_ctlel resuelve /usr/local/bin/pg_ctl, o simplemente siempre llámalo explícitamente).

Esto podría ayudar a otros usuarios que encuentren esta pregunta a través de la /var/pgsql_socket_altmención.

Será
fuente
Interesante. ¿También estás en Mountain Lion? ¿Instalaste PostgreSQL con Homebrew? Si es así, pregúntese si alguien más puede verificar esta solución en lugar de cambiar mi $PATHcomo lo he hecho.
Meltemi
¡Sí, sí, y eso espero!
Será
@wolftron su solución fue un éxito para mí (Mountain Lion, homebrew / postgres, / var / pgsql_socket_alt, los nueve completos). ¿Es este un nuevo problema en Mountain Lion con homebrew? Abriré un boleto con ellos si lo crees.
Parece que tenemos verificación de @Jamie.
Será el
Puedo confirmar este problema y la solución en OS X 10.8.2 / brew instalación de postgresql 9.2.1.
Hartwig
8

Una explicación plausible y típica sería que lo psqlque viene con homebrew es /usr/local/bin/psqldiferente al que estaría en su $ PATH, como /usr/bin/psql(incluido con OS X). Es posible que desee probar con la ruta completa:

$ /usr/local/bin/psql -U rails -d myapp_development

Además, hay algo bastante inusual en el psresultado de su pregunta: el servidor postgres se ejecuta bajo un meltemiusuario de Unix, mientras que generalmente, el postgresusuario dedicado de Unix se utiliza para eso.

Daniel Vérité
fuente
Además, _postgres(con guión bajo) para usuario / grupo son desconocidos para mí. ¿Es eso un artefacto o se espera?
Erwin Brandstetter
Sí, parece ser un $PATHproblema como usted dijo. Las cosas funcionan como antes cuando uso /usr/local/bin/psqlpara acceder a la base de datos. O Lion no tenía un sistema PostgreSQL o mi $ PATH se configuró de manera diferente. Ha pasado un año desde la última vez que me confundí con esto, así que no puedo recordar exactamente. En cuanto al usuario de Unix ... con una instalación Homebrew de PostgreSQL, el servidor se inicia mediante launchd y el usuario se configura como el usuario local que lo instaló, por defecto. Las cosas se configuran de manera diferente en Mac OS X Server, que inicia PostgreSQL automáticamente en postgres.
Meltemi
4

No conozco ningún archivo de configuración para el cliente psql. Sin embargo, psql respeta varias variables de entorno que se correlacionan con las opciones de la línea de comandos.

Entonces, para que el psql use automáticamente el socket de su elección, puede configurar la variable PGHOST en el directorio que contiene el socket. es decir

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase
happynix
fuente
1
No está documentado en ningún lugar donde pueda encontrar que puede configurar PGHOST en el directorio donde viven los archivos de socket. Pero eso de hecho funciona. ¡Gracias!
Andrew Schulman
3

Tratar:

psql -U rails -d myapp_development -h localhost

o

psql -U rails -d myapp_development -h 127.0.0.1
Miguel
fuente
3

Tarde, pero me pareció útil: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion

Eso fue para Lion, pero estaba teniendo los mismos problemas que el de este hilo después de actualizar de 10.6.8 a Mountain Lion y haber instalado PostgreSQL a través de HomeBrew antes mientras estaba en 10.6.8. También tuve la misteriosa /var/pgsql_socket_altcarpeta después de la actualización, pero la /var/pgsql_socketeliminé y la creé según lo sugerido por @wolftron. Sin embargo, esa no fue la solución final.

Si lo dejo en unix_socket_directoryblanco / comenté postgresql.conf, cualquier proyecto existente antes de la actualización se quejaría de que /var/pgsql_socketfaltaba el socket . Pero si cambié conf y codificado var/pgsql_socket, cualquier proyecto nuevo se quejaría de que /tmpfaltaba el socket . Muy frustrante ... hasta que lo reinstalé pg gemen un proyecto anterior a 10.8 ( gem uninstall pg && gem install pg) y lo dejé unix_socket_directorycomentado en el confarchivo. Después pg_ctlde reiniciar rápidamente el servidor, los proyectos nuevos y antiguos funcionaron. Mi zócalo pgsql vive /tmpahora, fwiw.

Nota al margen: si está utilizando activerecord-postgresql-adaptergem, desinstálelo primero, luego vuelva a instalar pg, luego activerecord-postgresql-adaptervuelva a instalarlo .

Pie
fuente
2

Acabo de registrarme en el dba SE, por lo que parece que no puedo comentar la publicación relevante (¡qué tontería!).

Sin embargo, estaba seguro de que estaba en el mismo barco que @thure. Me aseguré de que / usr / local / bin estuviese antes en mi RUTA que / usr / bin, había comprobado con qué binarios se había encriptado el shell whichy type, etc.

Vi los mismos síntomas que @thure. Entonces tuve una epifanía; Me di cuenta de que había reconstruido la pggema (estoy usando Ruby) en un shell cuya RUTA se había visto afectada negativamente por el path_helper de Mac (que se ejecuta desde / etc / profile y pone / usr / bin antes / usr / local / bin) .

Desinstalé pg y lo reinstalé en un shell cuya RUTA era correcta. De repente me pude conectar!

Por lo tanto, asegúrese de volver a compilar los enlaces de idioma de las personas y permita que encuentren la copia correcta de (presumiblemente) pg_config.

Graham Ashton
fuente
1

Descubrí que simular la ubicación real con la ubicación esperada funcionó bien:

sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

siguiendo las líneas de la respuesta aceptada por @thure pero más simple.

Danny Roberts
fuente
1

Aquí está, 2016, El Capitán está allá afuera, y Apple sigue cambiando las cosas. Postgres se instala como parte del sistema operativo y el archivo de configuración de postgres establece la propiedad unix_socket_directories en postgresql.conf en / tmp. El socket está en /tmp/.s.PGSQL.5432. Pude solucionar el problema ejecutando lo siguiente:

sudo ln -s /tmp /var/pgsql_socket

Espero que esto ayude a alguien.

rdiddly
fuente
1

Busque el archivo de socket correcto

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

Del resultado obtenga la ruta al archivo y use la ruta con el parámetro "-h" dentro del comando psql

Por ejemplo, esta es la forma en que me conecto a la base de datos Calendario y Contactos de macOS Server (dentro de una sesión ssh al servidor):

sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav

Luego, el archivo de socket en la ruta se usaría para conectarse.

Olaf Seifert
fuente
1

Por defecto, postgres parece estar intentando conectarse a través de unix-domain-sockets. ENCHUFE DE DOMINIO UNIX

Esto me sucedió cuando estaba ejecutando la instancia de Postgres en Docker. Debe ver qué tipo de conexión está aceptando su servidor. Para mí fue claramente TCP y no socket de dominio Unix.

Agregar un marcador para aceptar el host redirigió la conexión a la ruta correcta y solucionó el problema.

psql -U username -p port -h host

PD: los sockets de dominio Unix funcionan a nivel de kernel y la conexión no tiene que pasar por todo el jazz necesario para las conexiones TCP. Son bastante rápidos y eficientes cuando desea realizar una conexión a su propia máquina desde un proceso diferente como parte de la comunicación entre procesos.

Sudip Bhandari
fuente
0

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
0

Recibí este mismo error al intentar ejecutar psqlen la línea de comando. Resultó que mi solución era mucho más simple. Había configurado mal el puerto de escucha en el archivo de configuración: /etc/postgresql/9.4/main/postgres.conf . Había cambiado el puerto de port = 5432 a port = 5433. Cuando volví a cambiar a 5432, funcionó como se esperaba.

Para probar si ha hecho algo similar, puede ejecutar $ psql -p5433 Hay varias opciones útiles como esta para el comando psql que puede encontrar aquí: http://www.postgresql.org/docs/9.4/static/app-psql .html para que pueda probar su PROPIA mala configuración particular. Por supuesto, simplemente puede eliminar su último conjunto de cambios de configuración de los archivos * .conf, también, para probar si esos son el origen de su problema. Creo que vale la pena echarle un vistazo antes de perder el tiempo con los permisos y las propiedades de los archivos. (Solo no te olvides de /etc/init.d/postgresql restart)

Lo que NO pude encontrar fue el archivo de configuración que establece los valores predeterminados para el comando psql CLI. ¿Alguien puede comentar con eso, por favor?

Para mí, siempre vuelvo a mi primer principio de programación: "¡Normalmente soy la fuente de cualquier error!"

Quizás somos todos los robots
fuente