すべてのpostgresプロセスをうまく停止する方法


33

pg_ctlデータベースディレクトリが何であるかを思い出せず、環境変数PGDATAが定義されていない場合、どのようにして(またはそうでなければ)すべてのpostgresプロセスをうまく停止しますか?

回答:


58

安全です:

sudo pkill -u postgres

これにより、ユーザーとして実行されているすべてのプロセスが強制終了されますpostgres。または:

pkill postgres

これにより、「postgres」という名前のすべてのプロセスが強制終了されます。

()使用しないでください。ただ、(オプションなし)し、あなたが望むものです。kill -9kill -KILLkillSIGTERM

または、PostgreSQLに接続できる場合は、pgdataの場所を確認できます。例えば:

sudo -u postgres psql -c "SHOW data_directory";

...または、環境変数をチェックして、でポストマスターを識別します。他のプロセスの親であるものを探します。例えば:/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   

通常、そのdatadirはコマンドラインに表示されます。


3

同じコマンドで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引数に配信され、その後、データベースが正常に停止されます。


1
これが公式に機能することを意図している場合、これは正しい答えになるはずです。新しいオプションですか?
マット

この解決策は、使用されているオプションとPGDATA環境変数の使用法を説明することから恩恵を受けるでしょう。このコマンドを実行しようとすると、Linuxユーザー名にそのようなデータベースがなかったため、失敗しました。
ステファン

show data_directoryデータベースを指定せずに実行でき、実際、私の名前のデータベースを持っているサーバーはありません。また、PGDATAを必要としないため、失敗を説明するのに途方に暮れています。
-dland

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.