pg_ctl — PostgreSQLサーバを初期化、起動、停止、制御する
pg_ctl
init[db]
[-s
] [-D
datadir
] [-o
initdb-options
]
pg_ctl
start
[-w
] [-t
seconds
] [-s
] [-D
datadir
] [-l
filename
] [-o
options
] [-p
path
] [-c
]
pg_ctl
stop
[-W
] [-t
seconds
] [-s
] [-D
datadir
] [-m
s[mart]
| f[ast]
| i[mmediate]
]
pg_ctl
restart
[-w
] [-t
seconds
] [-s
] [-D
datadir
] [-c
] [-m
s[mart]
| f[ast]
| i[mmediate]
] [-o
options
]
pg_ctl
reload
[-s
] [-D
datadir
]
pg_ctl
status
[-D
datadir
]
pg_ctl
promote
[-s
] [-D
datadir
]
pg_ctl
kill
signal_name
process_id
pg_ctl
register
[-N
servicename
] [-U
username
] [-P
password
] [-D
datadir
] [-S
a[uto]
| d[emand]
] [-w
] [-t
seconds
] [-s
] [-o
options
]
pg_ctl
unregister
[-N
servicename
]
pg_ctlはPostgreSQLデータベースクラスタの初期化、PostgreSQLのデータベースサーバ(postgres)を起動、停止、再起動する、あるいは稼働中のサーバの状態を表示するためのユーティリティです。 サーバは手動で起動することも可能ですが、pg_ctlは、ログ出力のリダイレクトや、端末とプロセスグループの適切な分離などの作業を隠蔽してくれます。 さらにシャットダウン制御のための便利なオプションも提供します。
init
またはinitdb
モードはPostgreSQLの新しいデータベースクラスタを作成します。
データベースクラスタとは、単一のサーバインスタンスで管理されるデータベースの集合です。
このモードはinitdb
コマンドを呼び出します。
詳しくはinitdbを参照して下さい。
start
モードでは、新しいサーバが立ち上がります。
サーバはバックグラウンドで起動され、その標準入力は/dev/null
(Windowsの場合はnul
)に接続されます。
Unix系のシステムではデフォルトで、サーバの標準出力と標準エラーはpg_ctlの標準出力に転送されます(標準エラー出力には転送されません)。
pg_ctlの標準出力はファイルにリダイレクトするか、例えばrotatelogsなどのログローテーションプログラムのような別プロセスにパイプで渡すべきです。
こうしないと、postgres
はその出力を(バックグラウンドから)制御端末に書き出しますので、シェルのプロセスグループから切り離すことができません。
Windowsではデフォルトで、サーバの標準出力と標準エラーは端末に送信されます。
こうしたデフォルトの動作は-l
を用いてサーバの出力をログファイルに追加するように変更することができます。
-l
または出力のリダイレクトのどちらかを使用することを勧めます。
stop
モードは、指定されたデータディレクトリで稼働しているサーバを停止(シャットダウン)します。
-m
オプションでは、3つの異なる停止方式を選択できます。
「smart」モードは、全てのクライアントが切断し、オンラインバックアップがあればそれが終了するまで待ちます。
サーバがホットスタンバイ状態の場合、すべてのクライアント接続が切断された後にリカバリとストリーミングレプリケーションは終了します。
「fast」モード(デフォルト)はクライアントが切断するまで待たず、かつ、実行中のオンラインバックアップを終了させます。
全ての実行中のトランザクションをロールバックし、クライアントとの接続を強制的に切断した後、サーバを停止します。
「immediate」モードは、クリーンアップ処理なしで、全てのサーバプロセスを即座に中断します。
これを指定すると、再起動時にクラッシュリカバリ処理が実行されます。
restart
モードは、実質的にはstopを実行して、その後、startを実行します。
この時、postgres
コマンドラインオプションを変更することができます。
指定された相対パスがサーバ起動時にコマンドラインから指定されていた場合に restart
が失敗する可能性があります。
reload
モードは、単にpostgres
にSIGHUPシグナルを送り、(postgresql.conf
、pg_hba.conf
などの)設定ファイルの再読み込みを実行させます。
これにより、設定ファイルのオプションで完全な再起動を必要としないものについて、変更を反映させることができます。
status
モードは指定したデータディレクトリでサーバが稼働しているかどうかを確認します。
稼働している場合はPIDと、サーバを起動する時に使われたコマンドラインオプションを表示します。
サーバが稼働していない場合、このプロセスは終了ステータス3を返します。
アクセス可能なデータディレクトリが指定されていない場合、プロセスは終了ステータス4を返します。
promote
モードでは、指定したデータディレクトリで稼動中のスタンバイサーバにリカバリを終了し読み書き操作を始めるようコマンドを送ります。
kill
モードでは指定したプロセスにシグナルを送信することができます。
これは特に、killコマンドを持たないMicrosoft Windowsで有用です。
サポートするシグナル名の一覧は--help
を使用して確認してください。
register
モードにより、Microsoft Windows上でシステムサービスを登録することができます。
-S
オプションによりサービスの起動種類を「auto」(システム起動時に自動的にサービスを起動)か「demand」(要求が合った時にサービスを起動)から選択することができます。
unregister
によりMicrosoft Windows上のシステムサービスを登録解除することができます。
これは過去にregister
コマンドによりなされた変更を元に戻します。
-c
--core-file
実現可能なプラットフォームにおいて、サーバクラッシュ時にcoreファイルを生成できるように関連するソフトリソース制限を上げます。 障害が起きたサーバプロセスからスタックトレースを取得できますので、問題のデバッグや診断の際に有用です。
-D datadir
--pgdata datadir
データベース設定ファイルのファイルシステム上の場所を指定します。
これが省略された場合、環境変数PGDATA
が使われます。
-l filename
--log filename
サーバログ出力をfilename
に追記します。
そのファイルが存在しない場合は作成されます。
umaskは077に設定されますので、他のユーザからのログファイルへのアクセスはデフォルトでは許可されません。
-m mode
--mode mode
停止(シャットダウン)モードを指定します。
mode
はsmart
、fast
、immediate
、もしくはこの3つのモード名の最初の1文字をとることができます。
省略時はfast
が使用されます。
-o options
postgres
に直接渡されるオプションを指定します。
複数オプションの呼び出しが追加されます。
このオプションは、確実に1グループとして渡すために、通常は単一引用符または二重引用符で囲まなければなりません。
-o initdb-options
initdb
コマンドに直接渡すオプションを指定します。
このオプションは、確実にひとまとめとして渡すために、通常は単一引用符または二重引用符で囲まなければなりません。
-p path
postgres
の実行プログラムの位置を指定します。
デフォルトではpostgres
の実行プログラムはpg_ctl
と同じディレクトリにあるものとみなされます。また、このディレクトリに存在しなければ、構築時に指定したインストールディレクトリが使われます。
このオプションは、何か異例なことをしていてpostgres
が見つからないというようなエラーが出ない限り、使う必要はありません。
init
モードでは、このオプションは同様にinitdb
実行プログラムの場所を指定します。
-s
--silent
エラーメッセージのみを表示し、その他の情報を表示しません。
-t
--timeout
起動または停止の完了まで待機する最大の秒数。
デフォルトは環境変数PGCTLTIMEOUT
の値で、それが設定されていなければ60秒です。
-V
--version
pg_ctlのバージョンを表示し、終了します。
-w
起動もしくは停止処理が完了するのを待ちます。
待機は停止処理ではデフォルトのオプションですが、起動処理ではデフォルトではありません。
起動処理を待機している場合、pg_ctl
は繰り返しサーバへの接続を試行します。
停止処理を待機している場合、pg_ctl
はサーバがPIDファイルを削除するまで待機します。
このオプションにより起動時にSSLパスフレーズを入力することができます。
pg_ctl
は、起動もしくは停止が成功したかどうかに基づいて終了コードを返します。
-W
起動処理もしくは停止処理が完了するのを待ちません。 起動と再起動モードのデフォルトです。
-?
--help
pg_ctlコマンドライン引数の説明を表示し、終了します。
-e source
Windowsのサービスとして実行する際に、イベントログへの出力用にpg_ctlが使用するイベントソースの名前です。
デフォルトはPostgreSQL
です。
これはpg_ctl自体からのログ出力のみを制御することに注意してください。
サーバが起動した後は、event_sourceで指定したイベントソースが使用されます。
サーバが起動の初期で障害を起こした場合は、デフォルトのイベントソースのPostgreSQL
を使用するかもしれません。
-N servicename
登録するシステムサービスの名前です。 この名前は、システム名としても表示名としても使用されます。
-P password
サービスを開始するユーザ用のパスワードです。
-S start-type
登録するシステムサービスの起動種類です。
起動種類はauto
、demand
、またはこれら2単語の先頭の文字のいずれかです。
省略時はauto
が使用されます。
-U username
サービスを起動するユーザのユーザ名です。
ドメインユーザの場合はDOMAIN\username
書式を使用してください。
PGCTLTIMEOUT
起動または終了が完了するまでに待機する秒数のデフォルトの最大値です。 設定されていない場合のデフォルトは60秒です。
PGDATA
デフォルトのデータディレクトリの場所です。
また、pg_ctl
は、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(32.14. 環境変数を参照してください)。
この他のサーバ変数についてはpostgresを参照してください。
postmaster.pid
データディレクトリにこのファイルがあるかどうかによって、pg_ctlはサーバが現在稼働中かどうかを決定します。
postmaster.opts
このファイルがデータディレクトリにあれば、pg_ctl(のrestart
モード)は、-o
で上書きされるものを除き、このファイルの内容をオプションとしてpostgres
に渡します。
また、このファイルの内容がstatus
モードで表示されます。
サーバを起動します。
$
pg_ctl start
以下はサーバが接続を植え付けられるようになるまで待機する起動例です。
$
pg_ctl -w start
ポート5433を使いfsync
なしでサーバを起動します。
$
pg_ctl -o "-F -p 5433" start
サーバを停止するためには以下を使用します。
$
pg_ctl stop
-m
オプションによりどのようにバックエンドを停止させるかを制御できます。
$
pg_ctl stop -m fast
サーバの再起動は、サーバを停止してもう一度起動するのとほぼ同じですが、違うのは、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) /usr/local/pgsql/bin/postgres "-D" "/usr/local/pgsql/data" "-p" "5433" "-B" "128"
これは再起動(restart)モードで呼び出されるコマンドラインです。