Como verificar o status do servidor PostgreSQL Mac OS X

102

Como posso saber se meu servidor Postgresql está funcionando ou não?

Estou recebendo esta mensagem:

[~/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?

Atualizar:

> 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

Atualização 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
fonte
1
Você também deve procurar várias versões do postgres no Mac OS / X. Se você instalou o postgres via homebrew, pode obter o erro acima quando seu caminho estiver configurado incorretamente - eu apenas falsifiquei meu caminho acidentalmente e tudo começou a usar a instalação do sistema do postgres que não funcionou muito bem até que ajustei o caminho para use a instalação do brew
Jamie Cook

Respostas:

94

A maneira mais simples de verificar os processos em execução:

ps auxwww | grep postgres

E procure um comando parecido com isto (sua versão pode não ser 8.3):

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

Para iniciar o servidor, execute algo assim:

/Library/PostgreSQL/8.3/bin/pg_ctl start -D /Library/PostgreSQL/8.3/data -l postgres.log
Boêmio
fonte
ok e se eu não encontrar nada parecido, como faço para iniciar o servidor?
Ramy
4
pgrep postgrestambém funciona. Ou ps auxwww | grep [p]ostgrespara evitar que o grepseja pego.
Gregory Nisbet
1
Boo, sibilo re: a ps | grepsugestão de imperícia. pgrepé aceitável, apenas. pg_ctl statusé ótimo . ps auxwww | grep postgresvai corresponder grep postgres, e less /var/log/postgres/whatever.
Charles Duffy
deve-se observar que o diretório do cluster de banco de dados /Library/PostgreSQL/8.3/dataé arbitrariamente criado pelo usuário por meio do initdbcomando. aqui está o 8.3 doc
GPL
58

Você pode executar o seguinte comando para determinar se o postgress está em execução:

$ pg_ctl status

Você também deseja definir a PGDATAvariável de ambiente.

Aqui está o que tenho em meu ~/.bashrcarquivo 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 tenham efeito, lembre-se de fornecê-los da seguinte forma:

$ . ~/.bashrc

Agora, experimente e você deverá obter algo assim:

$ show-pg-status
pg_ctl: server is running (PID: 11030)
/usr/local/Cellar/postgresql/9.2.4/bin/postgres
13x
fonte
Dada a sua mensagem de erro, aposto que a sugestão do SamGoody de executar o comando initdb resolverá o problema de "Conexão recusada". Depois de consertado, tente minhas sugestões para obter o status do servidor db do postgres.
13x
26

Você provavelmente não fez o init postgres.

Se você instalou usando o HomeBrew, o init deve ser executado antes que qualquer outra coisa se torne utilizável.

Para ver as instruções, execute 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

Depois de executar isso, ele deve dizer algo como:

Sucesso. Agora você pode iniciar o servidor de banco de dados usando:

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

Se você ainda estiver tendo problemas, verifique seu firewall. Se você usar um bom como o HandsOff! e foi configurado para bloquear o tráfego, então sua página não verá o banco de dados.

SamGoody
fonte
20

A partir do PostgreSQL 9.3, você pode usar o comando pg_isreadypara determinar o status da conexão de um servidor PostgreSQL.

Dos documentos :

pg_isready retorna 0 para o shell se o servidor está aceitando conexões normalmente, 1 se o servidor está rejeitando conexões (por exemplo durante a inicialização), 2 se não houve resposta à tentativa de conexão e 3 se nenhuma tentativa foi feita (por exemplo devido para parâmetros inválidos).

Benjwadams
fonte
Como você verifica o mesmo para o psql antes de 9.3?
BRBdot
11

Depende de onde seu servidor postgresql está instalado. Você usa o pg_ctl para iniciar manualmente o servidor como abaixo.

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Nvick
fonte
@Ramy Você substituiu bin por var no caminho.
James Allman
hmmm ... ok. Achei que precisava verificar onde estava minha instalação. consulte a nova atualização.
Ramy
Como você instalou o postgres? Você executou o initdb após instalar o postgres?
Nvick
5

O pg_ctl statuscomando sugerido em outras respostas verifica se o processo postmaster existe e, se sim, relata que está em execução. Isso não significa necessariamente que está pronto para aceitar conexões ou executar consultas.

É melhor usar outro método, como usar psqlpara executar uma consulta simples e verificar o código de saída, por exemplo psql -c 'SELECT 1', ou usar pg_isready para verificar o status da conexão .

Owen Pauling
fonte
3
psql -c "SELECT 1" -d {dbname} > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 &se você deseja verificar e iniciar o postgres de uma vez (útil para scripts de automação).
Kate