Reparar Postgresql después de actualizar a OSX 10.7 Lion

Recientemente me actualicé a OSX 10.7, punto en el que la instalación de mis raíles se completó por completo al intentar conectar con el servidor psql. Cuando lo hago desde la línea de comando usando

psql -U postgres 

funciona totalmente bien, pero cuando bash ejecutar el servidor o la consola Rails con el mismo nombre de usuario y contraseña, obtengo 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 sobre lo que podría estar sucediendo sería muy útil! ¡Gracias!

Es un tema de PATH. Mac OSX Lion incluye Postgresql en el sistema ahora. Si haces un which psql es probable que veas usr/bin/psql lugar de usr/local/bin/psql que es el correcto de HomeBrew. Si ejecuta brew doctor debería recibir un mensaje que indique que necesita agregar usr/local/bin al encabezado de su variable de entorno PATH.

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 el PATH entonces salga de su sesión de shell o procese su archivo con source ~/.bash_profile y ahora debería estar bien de nuevo.

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.

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

Verifique dónde está el objective real:

 sudo find / -name .s.PGSQL.5432 

Necesitaba crear este directorio:

 mkdir /var/pgsql_socket/ 

Luego, usando el resultado del hallazgo anterior crea 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 simplemente crear el directorio y hacer el enlace simbólico y no perder el tiempo haciendo el hallazgo a menos que el enlace simbólico no funcione.

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

Si el problema persiste después de cambiar la ruta (como lo hizo por mí), también intente esto …

 gem pristine pg 

Parece que el problema (parcialmente) radica en la gem pg en sí misma. Cuando se construye, se da cuenta de dónde debería estar el socket de dominio. Si cambia la ubicación del socket del dominio después del hecho, no parece tener efecto hasta que reconstruya la gem.

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

 psql -h localhost -U postgres 

Tenía el mismo problema y tenía problemas para hacer que la solución de John Wang funcionara. Como Darren notó que hay un problema con la gem pg. Para que funcione, necesitaba:

 gem uninstall pg 

Luego vuelve a instalar.

Lo cual funcionó.

Me encontré con esto también, pero había instalado postgres yo mismo (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 anteponerla a su $ PATH.

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

(arreglo) exportación PATH = / usr / local / psql / bin: $ PATH

(después) `que psql ‘=> / usr / local / psql / bin

La sugerencia de John Wang de source ~/.bash_rc después de agregar que a tu bash_rc es oro.

¿Esto es para homebrew? Ports parece ponerlo:

 /opt/local/lib/postgresql91 

Así que asegúrese de usar export

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

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

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ñala @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 del sistema central, pero esto parece peligroso ya que podría afectar todas las colisiones de nombres de otras aplicaciones como esta.

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

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

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

Otra posible solución que funcionó para mí es restablecer el archivo postmaster al eliminarlo. Simplemente ejecuta:

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

Vale la pena consultar el registro de errores que puede encontrar aquí:

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

El mensaje de error que estaba teniendo fue:

 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.

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

Todo lo que tenía que hacer era cambiar la configuración de la memoria compartida . En mi caso, no era necesario juguetear con la configuración del camino.

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

Si desea un cambio permanente en su $ 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 .

Soy nuevo en Rails, pero agregué lo siguiente a database.yml :

 host: localhost port: 5432 

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

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

Parece que Woz tiene razón porque cada vez que cierro la tapa de mi macbook pro se cuelga … Esto es lo que funcionó después de la falla:

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