So überprüfen Sie den Status des PostgreSQL-Servers Mac OS X.

101

Wie kann ich feststellen, ob mein Postgresql-Server ausgeführt wird oder nicht?

Ich erhalte folgende Nachricht:

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

Aktualisieren:

> 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

Update 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
quelle
1
Sie sollten auch nach mehreren Versionen von Postgres unter Mac OS / X Ausschau halten. Wenn Sie Postgres über Homebrew installiert haben, kann der obige Fehler angezeigt werden, wenn Ihr Pfad falsch eingerichtet ist. Ich habe nur versehentlich meinen Pfad verfälscht und alles begann mit der Systeminstallation von Postgres, die nicht sehr gut funktionierte, bis ich den Pfad auf anpasste Verwenden Sie die Brauinstallation
Jamie Cook

Antworten:

94

Der einfachste Weg, um laufende Prozesse zu überprüfen:

ps auxwww | grep postgres

Suchen Sie nach einem Befehl, der ungefähr so ​​aussieht (Ihre Version ist möglicherweise nicht 8.3):

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

Führen Sie Folgendes aus, um den Server zu starten:

/Library/PostgreSQL/8.3/bin/pg_ctl start -D /Library/PostgreSQL/8.3/data -l postgres.log
Böhmisch
quelle
ok und wenn ich so etwas nicht finde, wie starte ich den Server?
Ramy
4
pgrep postgresfunktioniert auch. Oder um ps auxwww | grep [p]ostgreszu verhindern, dass die grepabgeholt werden.
Gregory Nisbet
1
Boo, zisch re: der ps | grepVorschlag für ein Fehlverhalten. pgrepist kaum akzeptabel. pg_ctl statusist großartig . ps auxwww | grep postgreswird passen grep postgres, und less /var/log/postgres/whatever.
Charles Duffy
Es ist zu beachten, dass das Datenbankclusterverzeichnis /Library/PostgreSQL/8.3/datavom Benutzer willkürlich über den initdbBefehl erstellt wird. Hier ist die 8.3 doc
GPL
57

Sie können den folgenden Befehl ausführen, um festzustellen, ob postgress ausgeführt wird:

$ pg_ctl status

Sie möchten auch die PGDATAUmgebungsvariable festlegen .

~/.bashrcFolgendes habe ich in meiner Datei für 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'

Denken Sie daran, die folgenden Informationen zu verwenden, damit sie wirksam werden:

$ . ~/.bashrc

Probieren Sie es jetzt aus und Sie sollten so etwas bekommen:

$ show-pg-status
pg_ctl: server is running (PID: 11030)
/usr/local/Cellar/postgresql/9.2.4/bin/postgres
l3x
quelle
Angesichts Ihrer Fehlermeldung wette ich, dass der Vorschlag von SamGoody, Ihren Befehl initdb auszuführen, das Problem "Verbindung abgelehnt" behebt. Sobald es behoben ist, versuchen Sie meine Vorschläge, um Ihren Postgres-DB-Serverstatus zu erhalten.
13x
26

Sie haben wahrscheinlich keine Postgres initiiert.

Wenn Sie mit HomeBrew installiert haben, muss der Init ausgeführt werden, bevor etwas anderes verwendet werden kann.

Führen Sie die Anweisungen aus, um die Anweisungen anzuzeigen 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

Sobald Sie das ausgeführt haben, sollte es etwas sagen wie:

Erfolg. Sie können den Datenbankserver jetzt folgendermaßen starten:

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

Wenn Sie immer noch Probleme haben, überprüfen Sie Ihre Firewall. Wenn Sie eine gute wie HandsOff verwenden! und es wurde konfiguriert, um den Verkehr zu blockieren, dann wird Ihre Seite die Datenbank nicht sehen.

SamGoody
quelle
20

Ab PostgreSQL 9.3 können Sie mit dem Befehl pg_isreadyden Verbindungsstatus eines PostgreSQL-Servers ermitteln.

Aus den Dokumenten :

pg_isready gibt 0 an die Shell zurück, wenn der Server Verbindungen normal akzeptiert, 1, wenn der Server Verbindungen ablehnt (z. B. während des Startvorgangs), 2, wenn keine Antwort auf den Verbindungsversuch erfolgt ist, und 3, wenn kein Versuch unternommen wurde (z. B. fällig) zu ungültigen Parametern).

benjwadams
quelle
Wie prüft man dasselbe für psql vor 9.3?
BRBdot
11

Dies hängt davon ab, wo Ihr Postgresql-Server installiert ist. Sie verwenden pg_ctl, um den Server wie unten beschrieben manuell zu starten.

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Nvick
quelle
@Ramy Sie ersetzt sind für var im Weg.
James Allman
Hmmm okay. Ich dachte, ich müsste überprüfen, wo meine Installation war. Bitte sehen Sie das neue Update.
Ramy
Wie haben Sie postgres installiert? Haben Sie initdb nach der Installation von postgres ausgeführt?
Nvick
5

Der pg_ctl statusin anderen Antworten vorgeschlagene Befehl überprüft, ob der Postmaster-Prozess vorhanden ist, und meldet in diesem Fall, dass er ausgeführt wird. Das bedeutet nicht unbedingt, dass es bereit ist, Verbindungen anzunehmen oder Abfragen auszuführen.

Es ist besser, eine andere Methode psqlzu verwenden, z. B. eine einfache Abfrage auszuführen und den Exit-Code zu überprüfen , z. B. psql -c 'SELECT 1'oder pg_isready den Verbindungsstatus zu überprüfen .

Owen Pauling
quelle
3
psql -c "SELECT 1" -d {dbname} > /dev/null || postgres -D /usr/local/var/postgres >postgres.log 2>&1 &Wenn Sie Postgres auf einmal überprüfen und starten möchten (praktisch für Automatisierungsskripte).
Kate