必要に応じて、仕事が終わった時にデータベースサーバをシャットダウン する方法がいくつかあります。サーバプロセスに送るシグナルによって 方法が区別されます。
SIGTERM を受け取った後で、postmaster は新しい接続を禁止しますが、 すでに存在するバックエンドは通常どおり動作させます。クライアントの 要求によってすべてのバックエンドが終了するまではシャットダウン しません。これがスマートシャットダウン です。
postmaster は新しい接続を禁止し全ての存在するバックエンドに SIGTERM を送り、この結果バックエンドは現在のトランザクション をアボートし、即座に終了します。そしてpostmaster はバックエンド の終了を待って、最後にデータベースをシャットダウンします。 これは速いシャットダウンです。
これは即時シャットダウンと呼ばれ、 postmaster に全てのバックエンドに SIGQUIT を送らせ即刻に 終了(データベースを正しく終了させずに)させます。バックエンドは 同様に SIGQUIT を受け取ると同時に終了します。これは 次の起動時に(WAL ログを再実行することで) リカバリーをすることになります。これは緊急の時にのみ使うことを 勧めます。
Caution |
postmaster をシャットダウンするためには SIGKILL を使わない 方が良いです。それによって postmaster が共有メモリとセマフォ をリリースできなくなり、手動でその作業をやらなければならなくなる 可能性があります。 |
> kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`
プログラムpg_ctlは postmaster のシャットダウン のもっと便利なインタフェースを提供するシェルスクリプトです。