Cómo comprobar el estado del servidor PostgreSQL Mac OS X

102

¿Cómo puedo saber si mi servidor Postgresql se está ejecutando o no?

Recibo 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?

Actualizar:

> 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
Ramy
fuente
1
También debe buscar varias versiones de postgres en Mac OS / X. Si ha instalado postgres a través de homebrew, puede obtener el error anterior cuando su ruta está configurada incorrectamente: accidentalmente modifiqué mi ruta y todo comenzó a usar la instalación del sistema de postgres, que no funcionó muy bien hasta que ajusté la ruta a usar la instalación de preparación
Jamie Cook

Respuestas:

94

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

ps auxwww | grep postgres

Y busque un comando que se parezca a esto (su versión puede no ser 8.3):

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

Para iniciar el servidor, ejecute algo como esto:

/Library/PostgreSQL/8.3/bin/pg_ctl start -D /Library/PostgreSQL/8.3/data -l postgres.log
Bohemio
fuente
ok y si no encuentro nada como eso, ¿cómo inicio el servidor?
Ramy
4
pgrep postgrestambién funciona. O ps auxwww | grep [p]ostgrespara evitar grepque lo recojan.
Gregory Nisbet
1
Boo, siseo re: la ps | grepsugerencia de mala praxis. pgrepes aceptable, apenas. pg_ctl statuses genial . ps auxwww | grep postgresva a coincidir grep postgresy less /var/log/postgres/whatever.
Charles Duffy
Cabe señalar que el directorio del clúster de la base de datos /Library/PostgreSQL/8.3/datalo crea arbitrariamente el usuario mediante el initdbcomando. aquí está el documento 8.3
GPL
58

Puede ejecutar el siguiente comando para determinar si se está ejecutando postgress:

$ pg_ctl status

También querrá establecer la PGDATAvariable de entorno.

Esto es lo que tengo en mi ~/.bashrcarchivo 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, recuerde obtenerlo así:

$ . ~/.bashrc

Ahora, pruébalo y obtendrás algo como esto:

$ show-pg-status
pg_ctl: server is running (PID: 11030)
/usr/local/Cellar/postgresql/9.2.4/bin/postgres
l3x
fuente
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 esté arreglado, pruebe mis sugerencias para obtener el estado de su servidor de base de datos de postgres.
l3x
26

Probablemente no iniciaste postgres.

Si lo instaló usando HomeBrew, el init debe ejecutarse antes de que cualquier otra cosa sea 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 lo haya ejecutado, 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, verifique su firewall. Si usa uno bueno como HandsOff! y se configuró para bloquear el tráfico, entonces su página no verá la base de datos.

SamGoody
fuente
20

A partir de PostgreSQL 9.3, puede utilizar el comando pg_isreadypara determinar el estado de conexión de un servidor PostgreSQL.

De los documentos :

pg_isready devuelve 0 al shell si el servidor acepta conexiones normalmente, 1 si el servidor rechaza conexiones (por ejemplo, durante el inicio), 2 si no hubo respuesta al intento de conexión y 3 si no se hizo ningún intento (por ejemplo, debido a parámetros inválidos).

benjwadams
fuente
¿Cómo verifica lo mismo para psql antes de 9.3?
BRBdot
11

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

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Nvick
fuente
@Ramy Sustituiste bin por var en la ruta.
James Allman
Hmmmm está bien. Pensé que necesitaba verificar dónde estaba mi instalación. por favor vea nueva actualización.
Ramy
¿Cómo instalaste postgres? ¿Ejecutó initdb después de instalar postgres?
Nvick
5

El pg_ctl statuscomando sugerido en otras respuestas verifica que exista el proceso postmaster y, si es 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 psqlpara ejecutar una consulta simple y verificar el código de salida, por ejemplo psql -c 'SELECT 1', o usar pg_isready para verificar el estado de la conexión .

Owen Pauling
fuente
3
psql -c "SELECT 1" -d {dbname} > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 &si desea verificar e iniciar postgres de una sola vez (útil para scripts de automatización).
Kate