データベースディレクトリが何であるかを思い出せず、PGDATA環境変数が定義されていない場合、どのようにしてpg_ctl
(またはそれ以外)ですべてのpostgresプロセスをうまく停止しますか?
安全です:
Sudo pkill -u postgres
(ユーザーpostgres
として実行されているすべてのprocを強制終了します)または
pkill postgres
(「postgres」という名前のすべてのプロシージャを強制終了します)
notkill -9
(kill -KILL
)を使用します。 kill
はオプションなしでSIGTERM
を実行します。
または、Pgに接続できる場合は、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を見ると緊張します。 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引数に配信され、その後、データベースが正常に停止されます。