![すべての postgres プロセスをうまく停止する方法](https://rvso.com/image/1048304/%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%20postgres%20%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92%E3%81%86%E3%81%BE%E3%81%8F%E5%81%9C%E6%AD%A2%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
pg_ctl
データベース ディレクトリが何であるか思い出せず、PGDATA 環境変数も定義されていない場合、すべての postgres プロセスを (または他の方法で) 適切に停止するにはどうすればよいでしょうか。
答え1
以下のことは安全です:
sudo pkill -u postgres
これにより、ユーザーとして実行されているすべてのプロセスが強制終了されますpostgres
。または:
pkill postgres
これにより、「postgres」という名前のすべてのプロセスが強制終了されます。
するないkill -9
( )を使用しますkill -KILL
。kill
(オプションなしで) は を実行しますSIGTERM
。これが目的の動作です。
あるいは、PostgreSQL に接続できる場合は、pgdata の場所を確認することもできます。例:
sudo -u postgres psql -c "SHOW data_directory";
...または、 の環境変数をチェックして、 で postmaster を識別します。他のプロセスの親となるものを探します。例:/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 コードが含まれます。
bare を実行すると、psql -c 'show data_directory'
おそらく次の出力が生成されます。
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
したがって、これをバックティックすると、 pg_ctl の -D 引数に$( ... )
渡され/path/to/postgresql/data
、データベースが規則的に停止されます。
答え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