![如何很好地停止所有 postgres 進程](https://rvso.com/image/1048304/%E5%A6%82%E4%BD%95%E5%BE%88%E5%A5%BD%E5%9C%B0%E5%81%9C%E6%AD%A2%E6%89%80%E6%9C%89%20postgres%20%E9%80%B2%E7%A8%8B.png)
pg_ctl
當您不記得資料庫目錄是什麼,也不記得定義 PGDATA 環境變數時,如何很好地停止所有 postgres 進程(或以其他方式)?
答案1
可以安全地:
sudo pkill -u postgres
這會殺死以 user 身分運行的所有進程postgres
。或者:
pkill postgres
這會殺死所有名為「postgres」的進程。
做不是使用kill -9
(kill -KILL
)。只需kill
(不含選項)執行 a SIGTERM
,這就是您想要的。
或者,如果可以連接到 PostgreSQL,則可以檢查 pgdata 位置。例如:
sudo -u postgres psql -c "SHOW data_directory";
....或透過檢查 中的環境變量,您可以在其中使用 識別郵政局長。尋找其他進程的父進程。例如:/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
它的資料目錄通常會顯示在其命令列上。
答案2
在同一個命令中看到kill 和postgres 讓我感到緊張。要只使用 回答問題pg_ctl
,那就是:
pg_ctl -D $(psql -Xtc 'show data_directory') stop
-X 參數表示忽略該.psqlrc
檔案。如果您將 psql 配置為發出查詢所花費的時間(透過 \timing 指令),這非常有用。
-t 參數表示刪除輸出頂部的列名和產生的總行數。
-c 參數包含要執行的 SQL 程式碼。
運行 barepsql -c 'show data_directory'
可能會產生以下輸出:
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
因此,反引號$( ... )
將傳遞/path/to/postgresql/data
給 pg_ctl 的 -D 參數,然後該參數將以有序的方式停止資料庫。
答案3
這對我來說工作參考。https://stackoverflow.com/a/5408501/248616
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'YOUR_NAME';
答案4
您只需運行命令即可
systemctl stop postgresql
當你想重新啟動它時運行
systemctl start postgresql
- 這些命令可能會要求您附加
sudo