Wie stoppen Sie alle Postgres-Prozesse mit pg_ctl
(oder auf andere Weise), wenn Sie sich nicht an das Datenbankverzeichnis erinnern und die Umgebungsvariable PGDATA nicht definiert haben?
Antwort1
Es ist sicher:
sudo pkill -u postgres
Dadurch werden alle Prozesse beendet, die als Benutzer ausgeführt werden postgres
. Oder:
pkill postgres
Dadurch werden alle Prozesse mit dem Namen „postgres“ beendet.
Tunnichtverwenden Sie kill -9
( kill -KILL
). kill
Führt einfach (ohne Optionen) ein aus SIGTERM
, was Sie möchten.
Alternativ können Sie den pgdata-Speicherort überprüfen, wenn Sie eine Verbindung zu PostgreSQL herstellen können. Beispiel:
sudo -u postgres psql -c "SHOW data_directory";
...oder indem Sie die Umgebungsvariablen in überprüfen , wo Sie den Postmaster mit identifizieren . Suchen Sie nach dem übergeordneten Prozess der anderen Prozesse. Beispiel:/proc/[postmaster pid]/environ
ps -fHC postgres
postgres
postgres 794 1 0 Nov06 ? 00:00:03 /usr/pgsql-9.3/bin/postgres -D /var/lib/pgsql/9.3/data -p 5432
postgres 857 794 0 Nov06 ? 00:00:00 postgres: logger process
postgres 871 794 0 Nov06 ? 00:00:00 postgres: checkpointer process
postgres 872 794 0 Nov06 ? 00:00:00 postgres: writer process
postgres 873 794 0 Nov06 ? 00:00:00 postgres: wal writer process
postgres 874 794 0 Nov06 ? 00:00:03 postgres: autovacuum launcher process
postgres 875 794 0 Nov06 ? 00:00:07 postgres: stats collector process
Sein Datenverzeichnis wird im Allgemeinen in seiner Befehlszeile angezeigt.
Antwort2
Es macht mich nervös, kill und postgres im selben Befehl zu sehen. Um die Frage nur mit zu beantworten pg_ctl
, wäre das:
pg_ctl -D $(psql -Xtc 'show data_directory') stop
Das Argument -X besagt, dass die .psqlrc
Datei ignoriert werden soll. Dies ist nützlich, wenn Sie psql so konfiguriert haben, dass die von einer Abfrage benötigte Zeit ausgegeben wird (über den Befehl \timing).
Das Argument -t bedeutet, dass der Spaltenname oben in der Ausgabe und die Gesamtzahl der erstellten Zeilen entfernt werden sollen.
Das Argument -c enthält den auszuführenden SQL-Code.
Das Ausführen eines Bare psql -c 'show data_directory'
führt wahrscheinlich zu folgender Ausgabe:
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
Wenn man dies also durch Backticking durchführt, $( ... )
erhält man /path/to/postgresql/data
das Argument -D von pg_ctl, das dann die Datenbank ordnungsgemäß stoppt.
Antwort3
Das funktioniert für mich, ref.https://stackoverflow.com/a/5408501/248616
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'YOUR_NAME';
Antwort4
Sie können einfach den Befehl ausführen
systemctl stop postgresql
Wenn Sie es neu starten möchten, führen Sie
systemctl start postgresql
- Wahrscheinlich werden Sie bei diesen Befehlen Folgendes anhängen müssen:
sudo