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_ctl kill [signal_name] [process_id]
pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-w] [-o options]
pg_ctl unregister [-N servicename]

説明

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

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

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

restartモードは、効果的にサーバを停止して、その後、再起動します。 この時、postgresコマンドラインオプションを変更することができます。

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

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

killモードでは指定したプロセスにシグナルを送信することができます。 これは特に、killコマンドを持たないMicrosoft Windowsで有用です。 サポートするシグナル名の一覧は--helpを使用して確認してください。

registerモードにより、Microsoft Windows上でシステムサービスを登録することができます。

unregisterにより、過去にregisterコマンドにより登録された、Microsoft Windows上のシステムサービスを登録解除することができます。

オプション

-D datadir

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

-l filename

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

-m mode

停止(シャットダウン)モードを指定します。 modesmartfastimmediate、もしくはこの3つのモード名の最初の1文字です。

-o options

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

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

-p path

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

-s

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

-w

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

-W

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

Windows用オプション

-N servicename

登録するシステムサービスの名前です。 この名前は、システム名としても表示名としても使用されます。

-P password

サービスを開始するユーザ用のパスワードです。

-U username

サービスを開始するユーザのユーザ名です。 ドメインユーザの場合、DOMAIN\usernameという書式を使用してください。

環境

PGDATA

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

PGPORT

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

この他のサーバ変数についてはpostgresを参照してください。 また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(項29.12を参照してください)。

ファイル

postmaster.pid

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

postmaster.opts.default

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

postmaster.opts

このファイルがデータディレクトリにあれば、pg_ctl(のrestartモード)は、-oで上書きされるものを除き、このファイルの内容をオプションとしてpostgresに渡します。 また、このファイルの内容が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: server is running (pid: 13718)
Command line was:
/usr/local/pgsql/bin/postgres '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'

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

関連項目

postgres