【JPUG主催】PostgreSQLカンファレンス2020【11月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

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

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

SIGTERM

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

SIGINT

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

SIGQUIT

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

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

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

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

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