HOWTO · PostgreSQL
Überprüfen Sie, ob PostgreSQL Server unter macOS ausgeführt wird
Dieser Artikel erwähnt mehrere BASH-Befehle, um den Status von PostgreSQL zu überprüfen.
Auf dieser Seite
Um festzustellen, ob PostgreSQL für Clients bereit ist, beginnen Sie mit pg_isready; eine reine Prozessprüfung zeigt lediglich, dass ein Prozess existiert. Die folgenden Befehle beziehen sich auf die macOS-Shell. PostgreSQL-Pakete verwenden unterschiedliche Installationslayouts. Daher variieren Speicherorte der Befehle und Clusterpfade je nach Distribution und Einrichtung.
PostgreSQL-Prozess und Verbindungsbereitschaft unter macOS prüfen
Wählen Sie die Prüfung danach aus, welche Frage Sie beantworten möchten. pg_isready prüft, ob ein PostgreSQL-Server auf Verbindungsversuche reagiert. Mit pg_ctl status prüfen Sie einen bestimmten Cluster, wenn Sie dessen Datenverzeichnis kennen. Die Prozessprüfung mit ps kann dabei helfen, Serverprozesse zu finden, stellt aber nicht fest, ob ein Client eine Verbindung herstellen kann. Diese Signale hängen zusammen, bedeuten jedoch nicht dasselbe.
Die Beispiele zeigen Befehlsmuster und keine auf einer lokalen Datenbank aufgezeichnete Ausgabe. PostgreSQL-Installation, Server, Anmeldedaten und Pfade hängen von der jeweiligen Umgebung ab. Passen Sie Host, Port, Benutzer und Datenverzeichnis an Ihre Einrichtung an.
Mit pg_isready die Verbindungsbereitschaft prüfen
Führen Sie pg_isready für das standardmäßige Verbindungsziel aus oder geben Sie Optionen wie -h localhost und -p 5432 an, um einen bestimmten Host und Port zu prüfen. Der Rückgabestatus ist für Skripte nützlich:
0: Der Server nimmt Verbindungen an.1: Der Server weist Verbindungen zurück, zum Beispiel während des Starts.2: Es wurde keine Antwort empfangen.3: Es wurde kein Verbindungsversuch unternommen, etwa weil die Parameter ungültig sind.
Die PostgreSQL-Dokumentation zu pg_isready erläutert diese Rückgabestatus und die Verbindungsoptionen des Befehls.
Ein erfolgreicher Status bedeutet, dass der Server Verbindungsversuche an diesem Ziel annimmt. Er bestätigt nicht, dass eine bestimmte Datenbank, Rolle, ein Passwort, Schema oder eine Abfrage verwendbar ist. Betrachten Sie ihn daher als Bereitschaftssignal und nicht als vollständige Gesundheitsprüfung.
Ein kleiner Shell-Zweig kann den dokumentierten Erfolgsstatus verarbeiten. Hier wird die Variable direkt gesetzt; das Beispiel stellt daher keine Verbindung zu einer Datenbank her:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
status=0
case "$status" in
0) printf '%s\n' 'accepting connections' ;;
esac
accepting connections
Für eine tatsächliche Prüfung erfassen Sie den Status unmittelbar nach dem Aufruf von pg_isready und verzweigen anhand dieses Werts. Ein späterer Befehl kann den zuletzt von der Shell gemeldeten Rückgabestatus ersetzen.
Mit pg_ctl status ein bekanntes Datenverzeichnis prüfen
Verwenden Sie pg_ctl -D "$PGDATA" status, wenn PGDATA das Datenverzeichnis des Clusters angibt. Sie können das Verzeichnis auch ausdrücklich übergeben, zum Beispiel mit pg_ctl -D /path/to/cluster status. Lässt sich das Datenverzeichnis nicht aus der Umgebung ableiten, benötigt pg_ctl den richtigen Pfad. Der Pfad zur ausführbaren Datei postgres ist kein Clusterverzeichnis.
Die PostgreSQL-Dokumentation zu pg_ctl beschreibt die Aktionen status und start sowie die hier verwendeten Optionen -D und -l.
Diese Prüfung meldet, ob der Postmaster-Prozess für dieses Datenverzeichnis läuft. Ein laufender Prozess allein beweist nicht, dass PostgreSQL Clientverbindungen annimmt. Verwenden Sie für diese Frage pg_isready. Wenn Sie PGDATA in einer Shell-Startdatei festlegen, prüfen Sie, ob der Wert auf das initialisierte Clusterverzeichnis verweist, bevor Sie sich darauf verlassen.
PostgreSQL-Prozesse mit ps untersuchen
Verwenden Sie zur Prozessprüfung ps aux | grep '[p]ostgres' oder, sofern verfügbar, pgrep -fl postgres. Das Muster mit den eckigen Klammern verhindert, dass grep seine eigene Befehlszeile findet. Prozessnamen und Argumente können dabei helfen, einen Serverstart und dessen -D-Verzeichnis zu erkennen. Ein passender Prozess ist jedoch nur ein zusätzliches Indiz: Er könnte gerade starten oder herunterfahren oder keine Verbindungen annehmen können.
psql beantwortet eine andere Frage. Ein Befehl wie psql -h localhost -p 5432 -U myuser -d mydb -c 'SELECT 1' versucht, eine authentifizierte Verbindung herzustellen und eine Abfrage auszuführen. Ein Fehler kann an den Anmeldedaten, der ausgewählten Datenbank, der Netzwerkkonfiguration oder der Verfügbarkeit des Servers liegen. Es handelt sich daher nicht um eine reine Prozessprüfung.
Fehler bei Verbindungen und Datenverzeichnissen beheben
„Connection refused“ bedeutet, dass der angeforderte Endpunkt die Verbindung zu diesem Zeitpunkt nicht angenommen hat. Prüfen Sie, ob Host und Port stimmen, vergleichen Sie das Ergebnis anschließend mit pg_isready und sehen Sie sich die relevanten Serverprotokolle an. Die Meldung allein beweist nicht, dass jede PostgreSQL-Instanz auf dem Rechner gestoppt ist; der Dienst könnte an einer anderen Adresse oder einem anderen Port lauschen.
Eine pg_ctl-Meldung über eine fehlende oder unbrauchbare postmaster.pid weist häufig auf einen falschen Datenverzeichnispfad, fehlende Berechtigungen oder einen nicht laufenden Cluster hin. Prüfen Sie das Verzeichnis, das beim Initialisieren des Clusters verwendet wurde, und den Wert von PGDATA. Verwenden Sie die Ausgabe von which postgres nicht als Wert für -D: Sie gibt den Speicherort der ausführbaren Datei an, während -D das Datenverzeichnis des Clusters erwartet. Löschen Sie PID-Dateien nicht, bevor Sie bestätigt haben, zu welchem Cluster die Datei gehört und dass dessen Server gestoppt ist.
PostgreSQL mit pg_ctl starten, wenn der Server gestoppt ist
Wenn der betreffende Cluster gestoppt ist und Sie sein Datenverzeichnis ermittelt haben, starten Sie ihn mit pg_ctl -D "$PGDATA" -l "$PGDATA/server.log" start. Ersetzen Sie PGDATA durch das richtige Verzeichnis, falls die Variable nicht gesetzt ist. Die Option -D erwartet das Clusterverzeichnis; mit -l wählen Sie eine Protokolldatei aus. Stellen Sie sicher, dass das Konto, unter dem der Befehl läuft, auf den Cluster und den Protokollspeicherort zugreifen kann. Bei paketverwalteten Installationen muss der Dienst möglicherweise stattdessen über das zugehörige Verwaltungswerkzeug gestartet werden.
Führen Sie nach dem Start pg_isready für den gewünschten Host und Port aus, um die Verbindungsbereitschaft zu prüfen. Verwenden Sie pg_ctl ... status, wenn Sie gezielt den Zustand eines bekannten Datenverzeichnisses bestätigen möchten. Kurz gesagt: Mit der Prozessprüfung finden Sie einen Prozess, mit pg_ctl status prüfen Sie einen bekannten Cluster und mit pg_isready stellen Sie fest, ob Clients eine Verbindung herstellen können.