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


Recientemente actualizé a OSX 10.7, momento en el que mi instalación de rails se estropeó completamente al intentar conectarse al servidor psql. Cuando lo hago desde la línea de comandos usando

psql -U postgres

Funciona totalmente bien, pero cuando intento ejecutar el servidor o consola de 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 de lo que podría estar pasando sería muy útil! ¡Gracias!

Author: Spike, 2011-07-21

15 answers

Es un problema de RUTA. Mac OSX Lion incluye Postgresql en el sistema ahora. Si haces un which psql probablemente verás usr/bin/psql en lugar de usr/local/bin/psql que es el correcto de HomeBrew. Si ejecuta brew doctor debería recibir un mensaje indicando que necesita agregar usr/local/bin al encabezado de su variable env PATH.

Editando su .bash_profile o .perfil, o cualquier shell que estés usando y añadiendo: export PATH=/usr/local/bin:$PATH

Como la primera exportación para el PATH entonces, salga de su sesión de shell o busque la fuente de su archivo con source ~/.bash_profile y ahora debería estar bien de nuevo.

 291
Author: John Wang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-21 07:17:54

Para aquellos de ustedes que están interesados, he juntado la solución. Todo lo que necesitaba era añadir

host: localhost

A la base de datos.yml para mi entorno y todo era salsa.

 90
Author: Dave G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-21 02:36:11

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

Compruebe dónde está el objetivo 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 la gente en Mountain Lion solo puede crear el directorio y hacer el enlace simbólico y no perder el tiempo haciendo el find a menos que el enlace simbólico no funcione.

PS-my PostgreSQL fue instalado a través del instalador oficial.

 46
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-23 14:57:35

Si el problema persiste más allá de cambiar la ruta (como lo hizo para mí), también intente esto...

gem pristine pg

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

 29
Author: Darren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-29 07:07:46

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

psql -h localhost -U postgres
 15
Author: Rogerio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-23 20:45:43

Tuve el mismo problema y estaba teniendo problemas para hacer 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

A continuación, vuelva a instalar.

Que lo hizo funcionar.

 5
Author: vladiim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-10 04:01:53

También me encontré con esto, pero yo mismo había instalado postgres (no con homebrew). Si ese es el caso, necesita encontrar la antigua ruta a psql (que puede ser /usr/local/bin, pero para mí era /usr/local/pgsql/bin) y anteponerla a su PATH PATH.

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

(fix) export PATH= / usr / local / psql / bin:PATH PATH

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

La sugerencia de John Wang a source ~/.bash_rc después de añadir que a su bash_rc es de oro.

 3
Author: tjarratt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-22 16:55:07

¿Esto es para homebrew? Ports parece ponerlo en:

/opt/local/lib/postgresql91 

Así que asegúrate de usar export

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

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

 3
Author: Antony Stubbs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-23 20:53:06

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 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 del sistema central, 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. 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 de la cerveza en su lugar

Esto viene con la advertencia de que el sistema predeterminado Postgres es cualquier brew ha instalado, por lo que tiene que hacer una llamada de juicio sobre si eso es adecuado para usted. No me veo necesitando Postgres 8.4 específicamente sobre 9.x, pero YMMV

 1
Author: Eric Hu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-17 02:51:40

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 puede 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.

 1
Author: mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-03 00:35:00

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

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

 0
Author: Ortwin Gentz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:09

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

 0
Author: user618589,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-03 18:13:24

Si te gusta un cambio permanente en tu PATH PATH prueba esto:

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

Esto reescribirá su ~/.MacOSX/environment.plist.

 0
Author: gylow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-29 01:10:22

Soy nuevo en Rails, pero añadiendo lo siguiente a la base de datos .yml funcionó para mí:

host: localhost

port: 5432

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

 0
Author: Ken Freeman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-15 22:09:13

Mi PostgreSQL está instalado en /Library/PostgreSQL para que las cosas de /usr/var no funcionaran 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 accidente para mí:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
 0
Author: sethmuss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-27 17:47:38