Come controllare lo stato del server PostgreSQL Mac OS X


102

Come posso sapere se il mio server Postgresql è in esecuzione o meno?

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

Aggiornare:

> 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
Dovresti anche cercare più versioni di postgres su Mac OS / X. Se hai installato postgres tramite homebrew, puoi ricevere l'errore sopra quando il tuo percorso è impostato in modo errato: ho appena accidentalmente confuso il mio percorso e tutto è iniziato utilizzando l'installazione di sistema di postgres che non funzionava molto bene finché non ho regolato il percorso su utilizzare l'installazione della birra
Jamie Cook

Risposte:


94

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

ps auxwww | grep postgres

E cerca un comando che assomigli a questo (la tua versione potrebbe non essere 8.3):

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

Per avviare il server, esegui qualcosa di simile:

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

ok e se non trovo niente del genere, come avvio il server?
Ramy

4
pgrep postgresfunziona anche. O ps auxwww | grep [p]ostgresper evitare che vengano grepprelevati.
Gregory Nisbet

1
Boo, hiss re: il ps | grepsuggerimento di negligenza. pgrepè accettabile, a malapena. pg_ctl statusè fantastico . ps auxwww | grep postgressta per corrispondere grep postgres, e less /var/log/postgres/whatever.
Charles Duffy

si noti che la directory del cluster di database /Library/PostgreSQL/8.3/dataviene creata arbitrariamente dall'utente tramite il initdbcomando. ecco il documento 8.3
GPL

58

Puoi eseguire il comando seguente per determinare se postgress è in esecuzione:

$ pg_ctl status

Dovrai anche impostare la PGDATAvariabile d'ambiente.

Ecco cosa ho nel mio ~/.bashrcfile 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 fare in modo che abbiano effetto, ricordati di provarlo in questo modo:

$ . ~/.bashrc

Ora, provalo e dovresti ottenere qualcosa del genere:

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

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

26

Probabilmente non hai avviato postgres.

Se hai installato utilizzando HomeBrew, l'init deve essere eseguito prima che qualsiasi altra cosa diventi utilizzabile.

Per vedere le istruzioni, esegui 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, dovrebbe dire qualcosa del tipo:

Successo. È ora possibile avviare il server del database utilizzando:

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

Se i problemi persistono, controlla il firewall. Se ne usi uno buono come HandsOff! ed è stato configurato per bloccare il traffico, quindi la tua pagina non vedrà il database.


20

A partire da PostgreSQL 9.3, puoi usare il comando pg_isreadyper determinare lo stato della connessione di un server PostgreSQL.

Dai documenti :

pg_isready restituisce 0 alla shell se il server accetta normalmente le connessioni, 1 se il server rifiuta le connessioni (ad esempio durante l'avvio), 2 se non c'è stata risposta al tentativo di connessione e 3 se non è stato effettuato alcun tentativo (ad esempio dovuto a parametri non validi).


Come controlli lo stesso per psql prima della 9.3?
BRBdot

11

Dipende da dove è installato il tuo server postgresql. 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

@Ramy Hai sostituito bin con var nel percorso.
James Allman

Hmmm ok. pensavo di dover verificare dove fosse la mia installazione. vedere il nuovo aggiornamento.
Ramy

Come hai installato postgres? Hai eseguito initdb dopo aver installato postgres?
Nvick

5

Il pg_ctl statuscomando suggerito in altre risposte controlla che il processo postmaster esista e, in tal caso, segnala che è in esecuzione. Ciò non significa necessariamente che sia pronto per accettare connessioni o eseguire query.

È meglio usare un altro metodo come usare psqlper eseguire una semplice query e controllare il codice di uscita, ad esempio psql -c 'SELECT 1', o usare pg_isready per controllare lo stato della connessione .


3
psql -c "SELECT 1" -d {dbname} > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 &se vuoi controllare e avviare postgres in una volta sola (utile per gli script di automazione).
Kate
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.