2011-11-02 13 views
64

Come posso sapere se il mio server Postgresql è in esecuzione o no?Come controllare lo stato del server PostgreSQL Mac OS X

sto ottenendo questo messaggio:

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

Aggiornamento:

> 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 

Aggiornamento 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

Si dovrebbe anche cercare più versioni di postgres su Mac OS/X. Se hai installato postgres tramite homebrew, puoi ottenere l'errore sopra riportato quando il tuo percorso non è impostato correttamente - ho solo accidentalmente modificato il mio percorso e tutto ha iniziato a utilizzare l'installazione di sistema di postgres che non ha funzionato molto bene fino a quando non ho regolato il percorso usa il brew install –

risposta

62

Il modo più semplice per controllare i processi in esecuzione:

ps auxwww | grep postgres 
.210

e cercare un comando che sembra qualcosa di simile (la versione potrebbe non essere 8.3):

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

per avviare il server, eseguire qualcosa di simile:

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

ok e se non trovo nulla del genere, come posso avviare il server? – Ramy

+0

@Ramy vedi risposta modificata – Bohemian

+1

'pgrep postgres' funziona anche. Oppure "ps auxwww | grep [p] ostgres' per impedire che 'grep' venga prelevato. –

8

Dipende da dove il tuo server postgresql è installato. Si utilizza pg_ctl per avviare manualmente il server come di seguito.

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

vedere la mia domanda di modifica, per favore – Ramy

+0

@Ramy Hai sostituito * bin * per * var * nel percorso. – jamesallman

+0

hmmm ... ok. Pensavo di dover controllare dov'era la mia installazione. si prega di consultare il nuovo aggiornamento. – Ramy

13

Probabilmente non hai iniziato postgres.

Se è stato installato utilizzando HomeBrew, l'init deve essere eseguito prima che qualsivoglia altro sia utilizzabile.

per visualizzare le istruzioni, eseguire 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 volta eseguito questo, dovrebbe dire qualcosa del tipo:

successo. A questo punto è possibile avviare il server di database utilizzando:

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

Se si continua ad avere problemi, controllare il firewall. Se ne usi uno buono come HandsOff! ed è stato configurato per bloccare il traffico, quindi la tua pagina non vedrà il database.

31

è possibile eseguire il seguente comando per determinare se è in esecuzione Postgress:

$ pg_ctl status 

dovrete anche per impostare la variabile PGDATA ambiente.

Ecco quello che ho nel mio file ~/.bashrc per 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' 

Per farli abbiano effetto, ricordarsi di fonte in questo modo:

$ . ~/.bashrc 

Ora, provare e si dovrebbe ottenere qualcosa di simile:

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

Dato il tuo messaggio di errore, scommetto che il suggerimento di SamGoody di eseguire il comando initdb risolverà il problema "Connessione rifiutata". Una volta risolto, prova i miei suggerimenti per ottenere lo stato del server db postgres. – l3x

+0

Wow .... Ho ricostruito postgres per anni. Questa è la soluzione perfetta!! – mindtonic

4

I pg_ctl status sugge comando in altre risposte controlla che il processo postmaster esista e in tal caso segnala che è in esecuzione. Ciò non significa necessariamente che sia pronto ad accettare connessioni o eseguire query.

È preferibile utilizzare un altro metodo come utilizzare psql per eseguire una query semplice e controllare il codice di uscita, ad es. psql -c 'SELECT 1' oppure utilizzare pg_isreadyto check the connection status.

+2

'psql -c" SELECT 1 "-d {dbname}>/dev/null || postgres -D/usr/local/var/postgres> postgres.log 2> & 1 & 'se si desidera controllare e avviare postgres in un colpo solo (utile per gli script di automazione). – Kate

6

A partire da PostgreSQL 9.3, è possibile utilizzare il comando pg_isready per determinare lo stato della connessione di un server PostgreSQL.

Dalle docs:

torna pg_isready 0 alla shell se il server accetta le connessioni normalmente, 1 se il server sta rifiutando le connessioni (ad esempio durante l'avvio), 2 se non vi era alcuna risposta alla tentativo di connessione, e 3 se nessun tentativo è stato fatto (ad esempio a causa di parametri non validi).