wie man alle Postgres-Prozesse auf einfache Weise stoppt

wie man alle Postgres-Prozesse auf einfache Weise stoppt

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). killFü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]/environps -fHC postgrespostgres

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 .psqlrcDatei 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/datadas 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

verwandte Informationen