No puedo acceder a PostgreSQL a veces después de la actualización de la aplicación del servidor

3

Estoy ejecutando la última versión de Mavericks 10.9.5 en mi Mac Mini Server. Antes de actualizar a la última versión de la aplicación de servidor 3.2.1, pude acceder a PostgreSQL en mis aplicaciones de Ruby on Rails y a través del servicio web. Después de instalar la aplicación de servidor, volví a implementar Phusion Passenger en /Library/Server/Web/Config/apache2/httpd_server_app.conf. Luego abrí la aplicación de servidor y verifiqué que el servicio web estaba activado.

Mis aplicaciones de Ruby on Rails dejaron de funcionar y me informaron que tenía el siguiente error:

PG::ConnectionBad (could not connect to server: Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Revisé el archivo plist / Library / Server / PostgreSQL / Config / org.postgresql.postgres.plist. Las dos configuraciones que normalmente modifico para deshacerme de este error son las siguientes. Este fue el código que funcionó antes de actualizar la aplicación de servidor. Verifiqué para asegurarme de que el código en la lista se modificó después de la actualización de Mavericks y la aplicación de servidor.

    <string>listen_addresses=127.0.0.1,::1</string>
    <string>unix_socket_permissions=0777</string>

Cuando ejecuto el comando sudo serveradmin fullstatus postgres aquí está la salida.

postgres:dataDirHasBeenInitialized = yes
postgres:PG_VERSION = "9.3.4"
postgres:dataDir = "/Library/Server/PostgreSQL/Data"
postgres:postgresIsResponding = no
postgres:dataDirIsDirectory = yes
postgres:PGserverVersion = 0
postgres:dataDirExists = yes
postgres:setStateVersion = 1
postgres:state = "RUNNING"

Cuando estaba ejecutando 9.2.4, postgresIsResponding estaba configurado en sí y PGserverVersion era 90204. No estoy seguro si algo cambió entre la versión 9.2 y 9.3 de PostgreSQL.

He realizado búsquedas en la web, pero no puedo encontrar ninguna publicación reciente sobre este tema con las últimas versiones de Mavericks y la aplicación del servidor.

Esto también se publica en Error del servidor .

Esto es lo que sucede cuando hago ps -ef | grep postgres

  220   124     1   0 Mon07AM ??         2:30.39 /usr/bin/python /Applications/Server.app/Contents/ServerRoot/usr/bin/xpostgres -a /Library/Server/ProfileManager/Config/PostgreSQL_config.plist
  220   361   124   0 Mon07AM ??         0:08.36 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/ProfileManager/Config/ServiceData/Data/PostgreSQL -c unix_socket_directories=/Library/Server/ProfileManager/Config/var/PostgreSQL -c logging_collector=on -c log_rotation_size=10MB -c log_connections=on -c log_lock_waits=on -c log_statement=ddl -c log_line_prefix=%t -c listen_addresses= -c log_directory=/Library/Logs/ProfileManager -c log_filename=PostgreSQL-%F.log -c log_min_messages=WARNING -c log_min_error_statement=WARNING -c unix_socket_group=_devicemgr -c unix_socket_permissions=0770 -c max_connections=200
  220   388   361   0 Mon07AM ??         0:00.01 postgres: logger process                                   
  220   401   361   0 Mon07AM ??         0:00.91 postgres: checkpointer process                                   
  220   402   361   0 Mon07AM ??         0:04.07 postgres: writer process                                   
  220   403   361   0 Mon07AM ??         0:03.88 postgres: wal writer process                                   
  220   404   361   0 Mon07AM ??         0:11.83 postgres: autovacuum launcher process                                   
  220   405   361   0 Mon07AM ??         0:01.08 postgres: archiver process                                   
  220   406   361   0 Mon07AM ??         0:33.03 postgres: stats collector process                                   
  220   407   361   0 Mon07AM ??         0:05.01 postgres: wal sender process _devicemgr [local] streaming 0/802DC88                                
  220   484   361   0 Mon07AM ??         0:00.73 postgres: _devicemgr devicemgr_v2m0 [local] idle                                
  220   495   361   0 Mon07AM ??         0:14.02 postgres: _devicemgr devicemgr_v2m0 [local] idle                                
  220   535   361   0 Mon07AM ??         0:00.00 postgres: _devicemgr devicemgr_v2m0 [local] idle                                
  501 75088 74999   0  7:14PM ttys000    0:00.00 grep postgres

Aquí está la salida cuando ejecuto psql -h localhost

psql: 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" (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" (fe80::1) and accepting
    TCP/IP connections on port 5432?
    
pregunta Pamela Cook - LightBe Corp 08.10.2014 - 22:15

2 respuestas

1

Hay un error en el proceso de actualización, donde no migra las bases de datos anteriores debido a una opción de configuración actualizada que evita que se inicie postgresql.

Aquí están los pasos para resolverlo:

  1. Detener el servicio postgres:

    sudo su
    serveradmin stop postgres
    
  2. Actualizar el campo de configuración:

    vim /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist
    

    reemplaza unix_socket_directory con unix_socket_directories a continuación, guarde & salir

  3. Mueva la carpeta de datos de PostgreSQL:

    mv /Library/Server/PostgreSQL/Data /Library/Server/PostgreSQL/DataOld
    
  4. Vuelva a crear la carpeta de datos estándar de PostgreSQL e inicialice una base de datos en blanco:

    sudo -u _postgres /Applications/Server.app/Contents/ServerRoot/usr/bin/initdb /Library/Server/PostgreSQL/Data -E utf8 --lc-collate=C --lc-ctype=C
    
  5. Actualice los datos en la base de datos en blanco con datos de la carpeta DataOld:

    sudo -u _postgres /Applications/Server.app/Contents/ServerRoot/usr/bin/pg_upgrade -b /Applications/Server.app/Contents/ServerRoot/usr/libexec/postgresql9.2 -B /Applications/Server.app/Contents/ServerRoot/usr/bin -d /Library/Server/PostgreSQL/DataOld -D /Library/Server/PostgreSQL/Data
    
  6. Reinicie el servicio PostgreSQL:

    launchctl load -w /Applications/Server.app/Contents/ServerRoot/System/Library/LaunchDaemons/org.postgresql.postgres.plist
    serveradmin start postgres
    

fuente: enlace

    
respondido por el lkraider 13.10.2014 - 20:34
0

Su problema es que Apple parece haber cambiado los directorios de socket de Unix y el puerto tcp utilizado.

Tenga en cuenta que estas opciones se pasaron al administrador de correo (al que han cambiado de nombre postgres_real ):

  • -c unix_socket_directories=/Library/Server/ProfileManager/Config/var/PostgreSQL
  • -c listen_addresses= (Sí, eso no es nada)

En otras palabras, está escuchando en un socket privado en una ubicación no predeterminada y no escucha en TCP / IP. También han cambiado los permisos de socket para denegar el acceso a otros usuarios:

  • -c unix_socket_group=_devicemgr
  • -c unix_socket_permissions=0770

Aplaudo a Apple por hacer esto finalmente, aunque parece que lo han hecho de la peor manera posible. Su instalación de PostgreSQL ha sido un gran problema durante mucho tiempo porque tiende a entrar en conflicto con otras instalaciones. Informé un error al respecto hace años. Sin embargo, es un problema importante si su proceso de actualización está descartando los datos del usuario, como parece.

Sugiero instalar un servidor PostgreSQL para su uso de desarrollo. Las opciones populares son Homebrew y Heroku's Postgres.app. Consulte enlace .

Si desea intentar integrar su aplicación en la aplicación Servidor como lo hizo antes, deberá establecer host: /Library/Server/ProfileManager/Config/var/PostgreSQL en database.yml . Pero realmente, estoy bastante seguro de que Apple está tratando de hacer de eso una instancia privada de PostgreSQL solo para su uso ...

    
respondido por el Craig Ringer 09.10.2014 - 02:48

Lea otras preguntas en las etiquetas