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

必要に応じて、仕事が終わった時にデータベースサーバをシャットダウン する方法がいくつかあります。サーバプロセスに送るシグナルによって 方法が区別されます。

SIGTERM

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

SIGINT

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

SIGQUIT

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

Caution

postmaster をシャットダウンするためには SIGKILL を使わない 方が良いです。それによって postmaster が共有メモリとセマフォ をリリースできなくなり、手動でその作業をやらなければならなくなる 可能性があります。

postmaster プロセスの PID はpsプログラム を使って見つけるか、もしくはデータディレクトリの中の ファイルpostmaster.pidから見つけることができます。 ですから、例えば速いシャットダウンをするためには下記のように なります。
> kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`

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