• 検索結果がありません。

起動/停止の待機

ドキュメント内 PostgreSQL Internals (1) (ページ 39-42)

2. プロセスとメモリー

2.3 インスタンス起動/停止時の動作

2.3.1 起動/停止の待機

インスタンスの管理にはpg_ctlコマンドを使用します。pg_ctlコマンドには、処理の完 了を待機する-w パラメーター/待機を行わない-W パラメーターを指定することができま す。マニュアルにも記載がありますが、インスタンスの起動時/再起動時は-Wパラメータ ー が デ フ ォ ル ト で 、 イ ン ス タ ン ス の 停 止 時 は-w パ ラ メ ー タ ー が デ フ ォ ル ト で す

(https://www.postgresql.org/docs/9.6/static/app-pg-ctl.html)。

表 21 pg_ctlコマンドによるインスタンス操作時の動作 動作 標準の動作 備考

start 非同期(-W)

restart 非同期(-W) 停止処理は同期

stop 同期(-w)

待機を行う場合のタイムアウト時間は-tパラメーターで指定します。デフォルトは60 秒です。1秒ごとにステータスをチェックし、タイムアウトまで繰り返します。

□ インスタンス起動時の動作

pg_ctl startコマンドによるインスタンス起動は-wパラメーターを指定しない限り起動

の完了を待機しません。postmasterプロセスの起動のためにsystem関数(Windows以 外)の戻り値のみチェックしています。またWindows環境ではWindows API

CreateRestrictedProcessを実行していますが、戻り値のチェックは行われていません。

このため起動エラーが発生しても、pg_ctlコマンドの戻り値は0になります。

例 14 インスタンス起動失敗時の動作

□ レプリケーション環境における待機

インスタンス停止時に-m smartパラメーター3を指定すると、クライアントの切断をタ イムアウトまで待ちます。ただしレプリケーション環境でスレーブ・インスタンスによる 接続はクライアントと見なされないため、スレーブの接続が行われていてもインスタンス は停止できます。

例 15 レプリケーション時の —m smartパラメーター

3 PostgreSQL 9.5で-m パラメーターのデフォルト値がsmartからfastに変更されました。

$ pg_ctl -D data start server starting

LOG: redirecting log output to logging collector process HINT: Future log output will appear in directory "pg_log".

$ pg_ctl -D data start ← 同じクラスターに対して2回起動(エラーになる)

pg_ctl: another server might be running; trying to start server anyway server starting

FATAL: lock file "postmaster.pid" already exists

Is another postmaster (PID 3950) running in data directory

"/usr/local/pgsql/data"?

$ echo $? ← pg_ctl コマンドのステータスは 0 0

postgres=# SELECT state FROM pg_stat_replication ; state

--- streaming (1 row) postgres=# \q

$ pg_ctl stop -D data -m smart

waiting for server to shut down... done server stopped

ホット・スタンバイ状態になっていないスレーブ・インスタンス(hot_standby=off)を 待機(-w)設定で起動すると、タイムアウト(デフォルトでは60秒)までコマンドが完 了しません。これはpg_ctlコマンドがPqping関数を使ってインスタンスの起動を確認し ているためです。

例 16 ホット・スタンバイではないスレーブ・インスタンスの起動

$ grep hot_standby data.stdby/postgresql.conf hot_standby = off

$ pg_ctl -D data.stdby start -w waiting for server to start....

LOG: redirecting log output to logging collector process HINT: Future log output will appear in directory "pg_log".

... stopped waiting server is still starting up

$ echo $?

0

ドキュメント内 PostgreSQL Internals (1) (ページ 39-42)