他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

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

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

SIGTERM

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

SIGINT

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

SIGQUIT

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

pg_ctlプログラムは、サーバをシャットダウンさせるシグナルを送信するための便利なインタフェースを提供します。

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

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

重要項目: サーバをシャットダウンするためにSIGKILLを使わない方がよいでしょう。 これによってサーバが共有メモリとセマフォを解放できなくなり、新しくサーバを開始する前に、手動でその作業をしなければならなくなる可能性があります。 更に、SIGKILLは、子プロセスにシグナルを中継することなくpostmasterを停止させます。 このため、個々の子プロセスを停止させるために、同じ作業を手作業で行わなければならなくなります。