Reparación de Postgresql después de actualizar a OSX 10.7 Lion

196

Recientemente me actualicé a OSX 10.7, momento en el que la instalación de mis rieles se bloqueó por completo al intentar conectarme al servidor psql. Cuando lo hago desde la línea de comando usando

psql -U postgres

funciona totalmente bien, pero cuando intento ejecutar el servidor o la consola de rails con el mismo nombre de usuario y contraseña, aparece este error

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Cualquier idea de lo que podría estar pasando sería muy útil. ¡Gracias!

Dave G
fuente
Esto también golpeó a alguien en mi oficina; tuvimos un problema similar al obtener el binario incorrecto, un problema adicional al intentar conectarse a los sockets de dominio en un directorio diferente con diferentes permisos, y parece que la actualización se comió todos los datos en la base de datos local. Afortunadamente, esto era solo una caja de desarrollo, por lo que no es un gran problema, sino un poco desagradable. :)
1
Hoy mismo llegué a este y recordé haber leído tu pregunta ayer. Es bueno ver que @John Wang salió y lo explicó :)
Ryan Bigg

Respuestas:

291

Es un problema de RUTA. Mac OSX Lion incluye Postgresql en el sistema ahora. Si lo hace which psql, probablemente verá en usr/bin/psqllugar de usr/local/bin/psqlcuál es el correcto de HomeBrew. Si ejecuta brew doctor, debería recibir un mensaje que indique que necesita agregar usr/local/binal encabezado de su variable PATH env.

Editando su .bash_profile o .profile, o cualquier shell que esté usando y agregando: export PATH=/usr/local/bin:$PATH

como la primera exportación para PATHluego, salga de la sesión de shell o obtenga su archivo source ~/.bash_profiley ahora debería estar bien nuevamente.

John Wang
fuente
12
Esto lo solucionó. También puede editar / etc / caminos y asegurarse de que / usr / local / bin esté en la parte superior
Greg
153
Además, tenga en cuenta que si instaló la gema pg ANTES de arreglar su ruta, usará el psql incorrecto. Si es así, desinstale la gema pg y luego vuelva a instalarla (desinstalar gema pg && gem install pg).
Troy
44
¿Es esto para homebrew? Los puertos parecen ponerlo en: / opt / local / lib / postgresql91 Así que asegúrese de usar export PATH = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs el
1
Mi camino informaba correctamente, pero la solución de Troy de desinstalar la gema pg, luego dejar que la reinstalación del paquete hiciera el truco para mí.
Tom Harrison
2
Solo para aclarar: parece que es mejor configurar su ruta correctamente, luego desinstalar / reinstalar la gema pg
Jamie Cook
90

Para aquellos de ustedes que están interesados, reconstruí la solución. Todo lo que necesitaba era agregar

host: localhost

a la base de datos.yml para mi entorno y todo fue salsa.

Dave G
fuente
9
tenga cuidado con esto: esta configuración cambia el acceso desde el socket del dominio a una conexión TCP. Si bien es probable que funcione, puede perder un poco de rendimiento y puertos utilizables en su máquina, lo que puede ser un problema dependiendo de su configuración. La solución provista por John es correcta.
Pilif
3
'gem uninstall pg' (elige todas las versiones), luego 'bundle' nuevamente para instalar la versión pg de tu Gemfile funcionó para mí.
tmadsen
Gracias Dave G, esto también funcionó para mí. Instalé la actualización 10.7.3 y rake db: migrate se quejó. Esto lo solucionó.
Sathish
Esto funcionó para mí también. Sin embargo, dejé la contraseña y el nombre de usuario en blanco.
Benjamin
Me imagino que esto funcionaría porque fuerza una conexión TCP / IP.
Duma
46

Tuve este mismo problema con Mountain Lion pero lo único que funcionó para mí fue esta solución :

Comprueba dónde está el objetivo real:

sudo find / -name .s.PGSQL.5432

Necesitaba crear este directorio:

mkdir /var/pgsql_socket/

Luego, utilizando el resultado del hallazgo anterior, cree este enlace simbólico:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

Sospecho que para la mayoría de las personas en Mountain Lion puedes crear el directorio y hacer el enlace simbólico y no perder el tiempo haciendo la búsqueda a menos que el enlace simbólico no funcione.

PD: mi PostgreSQL se instaló a través del instalador oficial.

Ben
fuente
Tengo la sensación de que podría ser para mí, pero no puedo hacer que funcione. Estoy obteniendo esto: ln: / var / pgsql_socket /: No existe tal archivo o directorio
Emmanuel
Lo siento, olvidé que me encontré con eso también. Se agregó un paso adicional para responder.
Ben
Te bendigo Ben. Apreciado enormemente.
Matt
29

Si el problema persiste después de cambiar el camino (como lo hizo para mí), también intente esto ...

gem pristine pg

Parece que el problema (parcialmente) reside en la propia gema pg. Cuando se construye, descubre dónde debe estar el socket de dominio. Si cambia la ubicación del socket de dominio después del hecho, no parece surtir efecto hasta que reconstruya la gema.

Darren
fuente
Esto funcionó para mí, incluso después de que arreglé la RUTA y reinstalé la gema pg sin que estuviera impecable.
Elliot Winkler
Gracias por este consejo, Darren
bhinks
15

Para aquellos que instalaron directamente desde el instalador oficial, solo agregar el host al comando funciona sin cambios de ruta:

psql -h localhost -U postgres
Rogerio
fuente
5

Tuve el mismo problema y estaba teniendo problemas para que la solución de John Wang funcionara. Como señaló Darren, hay un problema con la gema pg. Para que funcione, necesitaba:

gem uninstall pg

Luego reinstalar.

Lo que lo hizo funcionar.

vladiim
fuente
Tuve que ejecutar esto dos veces ... extraño. Desinstalé pg y luego instalé el paquete y falló. Luego solo hice la instalación de gemas pg y funcionó. ¡Gracias!
Dustin
3

Me encontré con esto también, pero también instalé postgres (no con homebrew). Si ese es el caso, debe encontrar la ruta anterior a psql (que puede ser / usr / local / bin, pero para mí era / usr / local / pgsql / bin) y anteponer eso a su $ PATH.

(antes) which psql=> / usr / bin / psql

(corrección) export PATH = / usr / local / psql / bin: $ PATH

(después) `which psql '=> / usr / local / psql / bin

La sugerencia de John Wang de que source ~/.bash_rcluego agregue eso a su bash_rc es dorada.

tjarratt
fuente
3

¿Es esto para homebrew? Puertos parece ponerlo en:

/opt/local/lib/postgresql91 

Así que asegúrese de usar exportar

PATH=/opt/local/lib/postgresql91/bin:$PATH

Problema con los puertos de Mac: https://trac.macports.org/ticket/30125

Antony Stubbs
fuente
1

No estoy contento con las respuestas más votadas, ya que son específicas del usuario del sistema operativo o reasignan Postgres para usar TCP en lugar de sockets de dominio, como lo señaló @pilif. He visto otra solución que implica reordenar las rutas predeterminadas a nivel del sistema para verificar la ruta de Brew antes de una ruta central del sistema, pero esto parece peligroso ya que podría afectar a todas las demás colisiones de nombres de aplicaciones como esta.

Este sitio detalla una solución que encontró mi compañero de trabajo. Todo se reduce a ejecutar un único script de shell que

  1. haga una copia de seguridad de los archivos Postgres 8.4 en un directorio separado
  2. enlace simbólico de la instalación de Postgres en su lugar

Esto viene con la advertencia de que el Postgres predeterminado del sistema es cualquier cerveza que haya instalado, por lo que debe tomar una decisión sobre si es adecuado para usted. No me veo necesitando Postgres 8.4 específicamente sobre 9.x, pero YMMV

Eric Hu
fuente
1

Otra posible solución que funcionó para mí es restablecer el archivo postmaster eliminándolo. Simplemente ejecute:

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

Vale la pena revisar el registro de errores que puedes encontrar aquí:

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

El mensaje de error que estaba teniendo era:

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

Todo funcionó muy bien después.

Miguel
fuente
Tuve el problema solo desde la línea de comandos. Eliminar el archivo /usr/local/var/postgres/postmaster.pid resolvió mi problema.
Michael A.
0

En mi caso, el servidor no se inició debido a una configuración de memoria compartida incorrecta. Al principio estaba confundido porque había varios procesos postgres en ejecución, pero esos eran procesos estándar del sistema. ¡Busca postmasterprocesos!

Todo lo que necesitaba hacer era cambiar la configuración de memoria compartida . En mi caso, no era necesario jugar con la configuración de la ruta.

Ortwin Gentz
fuente
0

Es posible que deba especificar el host de su base de datos.

usuario618589
fuente
0

Si te gusta un cambio permanente en tu $ PATH intente esto:

defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"

esto reescribirá tu ~/.MacOSX/environment.plist.

resplandor
fuente
0

Soy nuevo en Rails, pero agregar lo siguiente a database.yml funcionó para mí:

host: localhost

port: 5432

No estoy seguro de por qué Rails usa de forma predeterminada los sockets de dominio en lugar de TCP, mientras que PostgreSQL no configura los sockets de dominio de forma predeterminada.

Ken Freeman
fuente
0

Mi PostgreSQL está instalado en / Library / PostgreSQL para que las cosas / usr / var no funcionen para mí.

Parece que Woz es correcto porque cada vez que cierro la tapa de mi Macbook Pro se bloquea ... Esto es lo que funcionó después del bloqueo para mí:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
sethmuss
fuente