2011-11-02 12 views
64

¿Cómo puedo saber si mi servidor Postgresql se está ejecutando o no?Cómo verificar el estado del servidor PostgreSQL Mac OS X

estoy recibiendo este mensaje:

[~/dev/working/sw] sudo bundle exec rake db:migrate 
rake aborted! 
could not connect to server: Connection refused 
    Is the server running on host "localhost" and accepting 
    TCP/IP connections on port 5432? 

Actualización:

> which postgres 
/usr/local/bin/postgres 
> pg_ctl -D /usr/local/bin/postgres -l /usr/local/bin/postgres/server.log start 
pg_ctl: could not open PID file "/usr/local/bin/postgres/postmaster.pid": Not a directory 

Actualización 2:

>pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start 
server starting 
sh: /usr/local/var/postgres/server.log: No such file or directory 
+1

También debe buscar múltiples versiones de postgres en Mac OS/X. Si ha instalado postgres a través de homebrew, puede obtener el error anterior cuando su ruta de acceso se configuró incorrectamente. Intenté cambiar mi ruta por accidente y todo comenzó a usar la instalación del sistema de Postgres, que no funcionó muy bien hasta que ajusté la ruta de acceso a use la instalación de brew –

Respuesta

62

La forma más sencilla de comprobar los procesos en ejecución:

ps auxwww | grep postgres 

Y buscar un comando que se ve algo como esto (la versión no puede ser 8,3):

/Library/PostgreSQL/8.3/bin/postgres -D /Library/PostgreSQL/8.3/data 

Para iniciar el servidor, ejecutar algo como esto:

/Library/PostgreSQL/8.3/bin/pg_ctl start -D /Library/PostgreSQL/8.3/data -l postgres.log 
+0

ok y si no encuentro algo así, ¿cómo empiezo el servidor? – Ramy

+0

@Ramy ver respuesta editada – Bohemian

+1

'pgrep postgres' también funciona. O 'ps auxwww | grep [p] ostgres' para evitar que el 'grep' sea recogido. –

8

Depende de dónde su servidor postgresql está instalado. Utiliza el pg_ctl para iniciar el servidor manualmente como se muestra a continuación.

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start 
+0

ver la edición de mi pregunta, por favor – Ramy

+0

@Ramy Has sustituido * bin * por * var * en la ruta. – jamesallman

+0

hmmm ... ok. Pensé que necesitaba verificar dónde estaba mi instalación. por favor mira nueva actualización. – Ramy

13

Probablemente no INIT postgres.

Si ha instalado utilizando Homebrew, el init se debe ejecutar antes que otra cosa se convierte en utilizable.

Para ver las instrucciones, ejecute brew info postgres

# Create/Upgrade a Database 
If this is your first install, create a database with: 
    initdb /usr/local/var/postgres -E utf8 

To have launchd start postgresql at login: 
    ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 
Then to load postgresql now:  
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist 
Or, if you don't want/need launchctl, you can just run: 
    pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start 

Una vez que haya ejecutado de eso, debería decir algo como:

éxito. Ahora puede iniciar el servidor de base de datos usando:

postgres -D /usr/local/var/postgres or 
pg_ctl -D /usr/local/var/postgres -l logfile start 

Si aún tiene problemas, compruebe el servidor de seguridad. ¡Si usas uno bueno como HandsOff! y fue configurado para bloquear el tráfico, entonces su página no verá la base de datos.

31

puede ejecutar el siguiente comando para determinar si se está ejecutando Postgress:

$ pg_ctl status 

también querrá establecer la variable de entorno PGDATA.

Esto es lo que tengo en mi archivo ~/.bashrc para postgres:

export PGDATA='/usr/local/var/postgres' 
export PGHOST=localhost 
alias start-pg='pg_ctl -l $PGDATA/server.log start' 
alias stop-pg='pg_ctl stop -m fast' 
alias show-pg-status='pg_ctl status' 
alias restart-pg='pg_ctl reload' 

Para que surtan efecto, recordar a la fuente él de este modo:

$ . ~/.bashrc 

Ahora, probarlo y usted debe obtener algo como esto:

$ show-pg-status 
pg_ctl: server is running (PID: 11030) 
/usr/local/Cellar/postgresql/9.2.4/bin/postgres 
+0

Dado su mensaje de error, apuesto a que la sugerencia de SamGoody de ejecutar su comando initdb solucionará su problema de "Conexión rechazada". Una vez que se solucione, prueba mis sugerencias para obtener tu estado del servidor de Postgres db. – l3x

+0

Wow .... He estado reconstruyendo Postgres durante años. ¡¡Esta es la solución perfecta!! – mindtonic

4

Los pg_ctl status suge comando En otras respuestas, verifica que exista el proceso de postmaster y, de ser así, informa que se está ejecutando. Eso no significa necesariamente que esté listo para aceptar conexiones o ejecutar consultas.

Es mejor usar otro método como usar psql para ejecutar una consulta simple y verificar el código de salida, p. psql -c 'SELECT 1', o use pg_isreadyto check the connection status.

+2

'psql -c" SELECCIONAR 1 "-d {nombrebd}>/dev/null || postgres -D/usr/local/var/postgres> postgres.log 2> & 1 & 'si desea verificar e iniciar postgres de una vez (útil para scripts de automatización). – Kate

6

A partir de PostgreSQL 9.3, puede usar el comando pg_isready para determinar el estado de la conexión de un servidor PostgreSQL.

De los docs:

rendimientos pg_isready 0 a la carcasa si el servidor acepta conexiones normalmente, 1 si el servidor está rechazando las conexiones (por ejemplo, durante el arranque), 2 si no hay respuesta a la intento de conexión, y 3 si no se realizó ningún intento (por ejemplo, debido a parámetros no válidos).