回答:
安全です:
sudo pkill -u postgres
これにより、ユーザーとして実行されているすべてのプロセスが強制終了されますpostgres
。または:
pkill postgres
これにより、「postgres」という名前のすべてのプロセスが強制終了されます。
()は使用しないでください。ただ、(オプションなし)し、あなたが望むものです。kill -9
kill -KILL
kill
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
通常、そのdatadirはコマンドラインに表示されます。
同じコマンドでkillとpostgresを見ると緊張します。onlyを使用して質問に答えるにはpg_ctl
、次のようになります。
pg_ctl -D $(psql -Xtc 'show data_directory') stop
-X引数は、.psqlrc
ファイルを無視するように指示します。これは、(\ timingコマンドを介して)クエリにかかる時間を出力するようにpsqlを構成している場合に便利です。
-t引数は、出力の上部にある列名と生成された行の総数を削除するように指示します。
-c引数には、実行されるSQLコードが含まれます。
ベアpsql -c 'show data_directory'
を実行すると、おそらく次の出力が生成されます。
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
したがって、これをバックティック$( ... )
する/path/to/postgresql/data
と、pg_ctlの-D引数に配信され、その後、データベースが正常に停止されます。
PGDATA
環境変数の使用法を説明することから恩恵を受けるでしょう。このコマンドを実行しようとすると、Linuxユーザー名にそのようなデータベースがなかったため、失敗しました。
show data_directory
データベースを指定せずに実行でき、実際、私の名前のデータベースを持っているサーバーはありません。また、PGDATAを必要としないため、失敗を説明するのに途方に暮れています。
私のためにこの作品を参照してください。https://stackoverflow.com/a/5408501/248616
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'YOUR_NAME';