2011-11-02 12 views
64

Jak sprawdzić, czy mój serwer Postgresql jest uruchomiony, czy nie?Jak sprawdzić status serwera PostgreSQL Mac OS X

Dostaję komunikat:

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

Aktualizacja:

> 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 

Aktualizacja 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

Należy również zwrócić uwagę na wiele wersji postgres na Mac OS/X. Jeśli zainstalowałeś PostgreSQL przez homebrew, możesz uzyskać powyższy błąd, gdy ścieżka jest błędnie ustawiona - Po prostu przypadkowo sfałszowałem moją ścieżkę i wszystko zaczęło się od instalacji instalacji PostgreS, która nie działała zbyt dobrze, dopóki nie dostosowałem ścieżki do użyj brew brew install –

Odpowiedz

62

Najprostszym sposobem, aby sprawdzić procesy uruchomione:

ps auxwww | grep postgres 

i czekam na polecenia, który wygląda mniej więcej tak (wersja może nie być 8.3):

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

Aby uruchomić serwer, wykonać coś takiego:

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

ok, a jeśli nie znajdę czegoś takiego, jak uruchomić serwer? – Ramy

+0

@Ramy patrz poprawiona odpowiedź – Bohemian

+1

'pgrep postgres' również działa. Lub 'ps auxwww | grep [p] ostgres', aby uniemożliwić pobranie 'grep'. –

8

To zależy od tego, gdzie twój serwer Postgresql jest zainstalowany. Używasz pg_ctl do ręcznego uruchomienia serwera jak poniżej.

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

zobacz moje pytanie edytuj, proszę – Ramy

+0

@Ramy Zastąpiliśmy * bin * dla * var * na ścieżce. – jamesallman

+0

hmmm ... ok. Myślałem, że muszę sprawdzić, gdzie jest moja instalacja. zobacz nową aktualizację. – Ramy

13

Prawdopodobnie nie zainicjowałeś postgres.

Jeśli zainstalowano przy użyciu HomeBrew, init musi zostać uruchomiony, zanim cokolwiek innego stanie się użyteczne.

Aby zapoznać się z instrukcjami, uruchom 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 

Po uruchomieniu, że powinien powiedzieć coś w stylu:

sukcesu. Teraz można uruchomić serwera bazy danych przy użyciu:

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

Jeśli nadal występują problemy, sprawdź zaporę. Jeśli używasz dobrego, takiego jak HandsOff! i został skonfigurowany do blokowania ruchu, a strona nie zobaczy bazy danych.

31

można uruchomić następujące polecenie, aby określić, czy postgress jest uruchomiony:

$ pg_ctl status 

Będziesz także chcą ustawić zmienną środowiskową PGDATA.

Oto co mam w moim pliku ~/.bashrc dla PostgreSQL:

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' 

aby je odniosły skutek, należy pamiętać, aby zaopatrywać się go tak:

$ . ~/.bashrc 

Teraz spróbuj i zalecana uzyskać coś takiego:

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

Biorąc pod uwagę twój komunikat o błędzie, założę się, że sugestia SamGoody, aby uruchomić polecenie initdb, naprawi problem "Odmowa połączenia". Po poprawieniu wypróbuj moje sugestie, aby uzyskać status serwera Postgres db. – l3x

+0

Wow .... Od wielu lat przebudowuję PostgreSQL. To jest idealne rozwiązanie !! – mindtonic

4

Polecenie pg_ctl status sugeruje w innych odpowiedziach sprawdza, czy proces postmaster istnieje, a jeśli tak, zgłasza, że ​​jest uruchomiony. To niekoniecznie oznacza, że ​​jest gotowe do akceptowania połączeń lub wykonywania zapytań.

Lepiej jest użyć innej metody, takiej jak użycie psql do uruchomienia prostego zapytania i sprawdzenia kodu wyjścia, np. psql -c 'SELECT 1' lub użyj pg_isreadyto check the connection status.

+2

'psql -c" WYBIERZ 1 "-d {dbname}>/dev/null || postgres -D/usr/local/var/postgres> postgres.log 2> & 1 & 'jeśli chcesz sprawdzić i uruchomić postgres za jednym razem (przydatne dla skryptów automatyzacji). – Kate

6

Począwszy od PostgreSQL 9.3, można użyć polecenia pg_isready, aby określić status połączenia serwera PostgreSQL.

Z docs:

pg_isready zwraca 0 do powłoki, jeśli serwer akceptuje połączeń zwykle, 1 gdy serwer odrzucenia połączenia (na przykład podczas uruchamiania), 2, jeśli nie było żadnej odpowiedzi do próba połączenia i 3, jeśli nie podjęto próby (na przykład z powodu nieprawidłowych parametrów).