pg_ctl

名前

pg_ctl -- PostgreSQL サーバの起動、停止、再起動

概要

pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]
pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart [-w] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl reload [-s] [-D datadir]
pg_ctl status [-D datadir]

説明

pg_ctlPostgreSQL のバックエンドサーバ(postmaster) を起動、停止、再起動、あるいは稼働中のサーバの状態を表示するためのユーティリティです。 サーバは手動で起動することも可能ですが、pg_ctl はログ出力のリダイレクトや、ターミナルとプロセスグループの的確な分離などの作業をカプセル化します。 さらにシャットダウン制御のための便利なオプションも提供します。

start モードでは、新しいサーバが立ち上がります。 サーバはバックグラウンドで起動され、標準入力は /dev/null に接続されます。 標準出力と標準エラーは、(-l オプションが使われた場合)ログファイルに追加されます。 そうでない場合は pg_ctl の標準出力 (標準エラー出力ではありません) にリダイレクトされます。 ログファイルを指定しない場合、pg_ctl の標準出力は、ファイルにリダイレクトするか、例えばログ回転プログラムのような別プロセスにパイプで渡すべきです。 そうしないと、postmaster は出力を (バックグラウンドから) 制御ターミナルに書き出すので、シェルのプロセスグループから切り離せません。

stop モードは、指定されたデータディレクトリで稼働しているサーバを停止 (シャットダウン)します。 -m オプションで 3 つの異なる停止方式を選択することができます。 "Smart" モードは全てのクライアントが切断するまで待ちます。これがデフォルトです。 "Fast" モードはクライアントが切断するまで待ちません。 すべての実行中のトランザクションはロールバックされ、クライアントとの接続は強制的に切断され、その後サーバの停止が行なわれます。 "Immediate" モードは、クリーンアップ処理なしで、全てのサーバプロセスを中断します。 この指定により、再起動時に回復処理が実行されることになります。

restart モードは、効果的に停止を行い、そして次に起動を実行します。 これは postmaster コマンドラインオプションの変更を可能にします。

reload モードは単に postmasterSIGHUP シグナルを送り、(postgresql.confpg_hba.conf などの) 設定ファイルを再度読み込ませます。 これにより、完全な再起動をすることなく、設定ファイルのオプションの変更を反映させることができます。

status モードは指定したデータディレクトリでサーバが起動しているかを確認します。 起動している場合は PID と、サーバを起動する時に使われたコマンドラインオプションを表示します。

オプション

-D datadir

データベースファイルのファイルシステム上の場所を指定します。これが省略された場合、環境変数 PGDATA が使われます。

-l filename

サーバログ出力を filename に追加します。そのファイルが存在しない場合は作成されます。 umask は 077 に設定されるため、他のユーザからのログファイルへのアクセスはデフォルトでは許可されません。

-m mode

停止 (シャットダウン) モードを指定します。modesmartfast、または immediate、もしくはこれらの 3 つのうちのどれかの最初の文字になります。

-o options

直接 postmaster に渡されるオプションを指定します。

このオプションは通常、1 つのグループとして渡されることを保証するために、単一引用符または二重引用符で囲まれます。

-p path

postmaster の実行プログラムの位置を指定します。 デフォルトでは postmasterの実行プログラム は pg_ctl と同じディレクトリにあるものと仮定され、もしなければ構築時に指定したインストールディレクトリとなります。 このオプションは何か異例なことをしていて postmaster が見つからないというようなエラーが出ない限り、使う必要はありません。

-s

エラーメッセージのみを表示し、その他の情報を表示しません。

-w

起動もしくは停止処理が完了するのを待ちます。 60 秒でタイムアウトします。 停止 (シャットダウン) 処理のデフォルトです。 停止に成功したかどうかは、PID ファイルの削除により分かります。 起動の際は、psql -l で成功したかどうかが分かります。 pg_ctlpsql用の適切なポートを使用しようとします。 環境変数 PGPORT があれば、それが使用されます。 さもなくば、postgresql.conf ファイルで設定されたポートがあるか確認します。 どちらも使用されない場合は、PostgreSQL のコンパイル時のデフォルトポートが使用されます。(デフォルトは5432です。)

-W

起動もしくは停止が完了するのを待ちません。起動と再起動のデフォルトです。

環境

PGDATA

デフォルトのデータ保存場所です。

PGPORT

psql 用のデフォルトポートです。(-wオプションで使用されます。)

その他については postmaster を参照してください。

ファイル

postmaster.pid

データディレクトリにこのファイルがあるかどうかによって、pg_ctl はサーバが現在稼働中か否かを決定します。

postmaster.opts.default

このファイルがデータディレクトリにあれば、pg_ctl (のstartモード)は、-o で上書きされるものを除き、このファイルの内容をオプションとしてpostmasterに渡します。

postmaster.opts

このファイルがデータディレクトリにあれば、pg_ctl (のrestartモード)は、-o で上書きされるものを除き、このファイルの内容をオプションとしてpostmasterに渡します。 また、このファイルの内容が status モードで表示されます。

postgresql.conf

データディレクトリに置かれるこのファイルは、start モードで-wが使用された時に psql で使用する適切なポートを見付けるために解析されます。

注釈

完全な起動を行うための待機は洗練された操作ではなく、もしアクセス制御の設定が、ローカルクライアントが(パスワード認証などの)手動による対話なしでは接続できないようになっていた場合には失敗します。

サーバの起動

サーバを起動します。

$ pg_ctl start

以下はサーバが立ち上がるまでブロックする、サーバの起動例です。

$ pg_ctl -w start

ポート 5433 を使い fsync なしでサーバを起動します。

$ pg_ctl -o "-F -p 5433" start

サーバの停止

$ pg_ctl stop

これはサーバを停止します。-m スイッチを使うと どのように バックエンドを停止 (シャットダウン) させるかを制御できます。

サーバの再起動

この手順はサーバを停止して再度起動させるのとほぼ同じですが、違うのは、pg_ctl が以前起動していたインスタンスに渡されていたコマンドラインオプションを保存し再利用することです。 下記はサーバを再起動するもっとも簡単な方法です。

$ pg_ctl restart

再起動の際にサーバのシャットダウンを待ってから立ち上げを行なう方法です。

$ pg_ctl -w restart

以下はポート 5433 を使って再起動し、再起動後に fsync を無効にする方法です。

$ pg_ctl -o "-F -p 5433" restart

サーバの状態表示

下記は pg_ctl からの状態の出力の例です。

$ pg_ctl status
pg_ctl: postmaster is running (pid: 13718)
Command line was:
/usr/local/pgsql/bin/postmaster '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'

これは再起動 (restart) モードで呼び出されるコマンドラインです。

関連項目

postmaster