16.6. サーバーのシャットダウン

データベースサーバをシャットダウンする方法は複数あります。 postmasterプロセスに異なるシグナルを送ることで、シャットダウンの方法を制御します。

SIGTERM

SIGTERMを受け取った後で、サーバは新しい接続を禁止しますが、すでに存在するセッションは通常どおり動作させます。 すべてのセッションが通常に終了するまではシャットダウンしません。 これがスマートシャットダウンです。

SIGINT

サーバは新しい接続を禁止しすべての存在するサーバプロセスにSIGTERMを送り、この結果サーバプロセスは現在のトランザクションをアボートし、即座に終了します。 そして サーバはサーバプロセスの終了を待って、最後にシャットダウンします。 これが高速シャットダウンです。

SIGQUIT

これは即時シャットダウンと呼ばれ、postmasterプロセスは、すべての子プロセスに SIGQUIT を送り、(自らを正しくシャットダウンせずに) 即座に終了します。 子プロセスは同様にSIGQUITを受け取ると即座に終了します。 これは次の起動時に(WALログを再実行することで)リカバリをすることになります。 これは緊急の時にのみ使うことを勧めます。

重要項目: サーバをシャットダウンするためにSIGKILLを使わない方がよいでしょう。 それによってサーバが共有メモリとセマフォを解放できなくなり、手動でその作業をしなければならなくなる可能性があります。

postmasterプロセスのPIDpsプログラムを使って見つけるか、もしくはデータディレクトリの中のファイルpostmaster.pidから見つけることができます。 ですから、たとえば高速シャットダウンをするためには下記のようになります。

$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`

プログラムpg_ctlはサーバのシャットダウンのもっと便利なインターフェイスを提供するシェルスクリプトです。