postmaster

Name

postmaster  --  Postgres マルチユーザバックエンドの起動

Synopsis

postmaster [ -B nBuffers ] [ -D DataDir ] [ -i ]
postmaster [ -B nBuffers ] [ -D DataDir ] [ -N nBackends ] [ -S ]
   [ -d [ DebugLevel ] [ -i ] [ -o BackendOptions ] [ -p port ]
postmaster [ -n | -s ] ...
  

入力

postgres では以下のコマンドライン引数を指定できます。

-B nBuffers

立ち上がった時点にバックエンドサーバプロセスに postmaster が割り当てた共有メモリバッファの数です。 デフォルトは 64 バッファで、一つのバッファの大きさは 8K バイト (または config.h で設定された BLCKSZ の値)です。

-D DataDir

データベースディレクトリのツリーのルートとして使用するディレクトリ を指定します。-D が指定されていない場合、デフォルトのデータ ディレクトリは、環境変数 PGDATA の値となります。 PGDATA が設定されていなければ、使用されるディレクトリは $POSTGRESHOME/data となります。 環境変数が設定されていないで、コマンドラインオプションも指定されて いないと、コンパイルしたときのデフォルトのディレクトリが使用されます。

-N nBackends

この postmaster が起動できるバックエンドサーバプロセスの最大数 です。デフォルトの設定ではこの値は 32 になっていますが、システムが プロセス数をサポートする限り最大 1024 まで設定可能です。 デフォルト値と最大可能値は Postgres の組み立て時に変更可能です。(src/include/config.h を参照のこと。)

-S

postmaster プロセスがサイレントモード で立ち上がることを指定します。それは、ユーザの(制御している) tty とは切り離し、自分自身のプロセスグループを立ち上げます。この指定 は標準出力と標準エラーへ出力されるいかなるメッセージも破棄されます のでデバッグのオプションと混在して使用してはいけません。

-d [ DebugLevel ]

オプション引数の DebugLevel はバックエンドサーバが生成するデバッグ出力の大きさを決定します。 DebugLevel が 1 の時、 postmaster は全ての接続トラフィックをトレースしてそれでお仕舞いです。 レベルが 2 以上の場合、バックエンドプロセスでデバッグが起動されて postmaster はバックエンドの環境とトラフィック処理を含む、より多くの 情報を表示します。 バックエンドサーバがデバッグ結果を送るファイルが指定されていない場合、 結果は親である postmaster の tty 制御 に出現します。

-i

TCP/IP またはインターネットドメインソケット通信を可能にします。 このオプションが無い場合、ローカル Unix ドメインソケット通信 のみが可能となります。

-o BackendOptions

BackendOptions で指定される postgres オプションはこの postmaster で起動される全ての バックエンドサーバプロセスに渡されます。 オプションの文字列内にスペースがある場合、文字列全体が括弧で 括られなければなりません。

-p port

フロントエンドアプリケーションからの接続を postmaster が監視する TCP/IP ポート またはローカル Unix ドメインソケットファイル拡張子を指定します。 デフォルトは、 PGPORT の値、または環境変数 PGPORT がセットせれて いない場合 Postgres がコンパイルされときに指定された (通常 5432)値となります。デフォルトのポート以外を指定した 場合、(psql を含んだ)全ての フロントエンドアプリケーションはコマンドラインオプションか PGPORT で同じポートを指定しなければなりません。

バックエンドが異常終了した場合、デバッグ用として、いくつかの コマンドラインオプションが用意されています。これらのオプションは かかる状況における postmaster の 振舞いを制御しますが、いずれのオプションも通常の 操作を目的としているものではありません

このような状況に対しての通常の戦略は、他の全てのバックエンドに 終了と共有メモリとセマフォの再初期化を通知することです。 その理由はおかしくなっているバックエンドが終了する前に、 何らかの共有状態を変造する恐れがあるからです。

これらの特別の場合のオプションとは:

-n

postmaster は共有データ構成を再初期化しません。 そこで、知識のあるシステムプログラマは共有メモリとセマフォ状況 の調査のために shmemdoc プログラムを使用します。

-s

postmaster は他の全てのバックエンドプロセスを SIGSTOP シグナルを送って中止します。ただし、停止はしません。 このことによって、システムプログラマが全てのバックエンド プロセスから手作業でコアダンプを収集出来ることになります。

出力

semget: No space left on device

このメッセージが現れたら ipcclean コマンドを実行しなければなりません。実行後、 postmaster を再起動します。引続きエラーが出るようであれば、 インストールの注意書きにしたがって、共有メモリとセマフォに ついてカーネルを構築する必要がありそうです。 一台のホスト上で postmaster の複数のインスタンスを立ちあげている場合、 特にカーネルの共有メモリやセマフォの限界が小さい場合、 共有メモリあるいはセマフォ(または両方)のパラメータを 拡張するようにカーネルを再構築しなければなりません。

Tip: Postgres の共有メモリ消費量 を低くするため -B を使用し、あるいは Postgres のセマフォ 消費をするなくする -N を使用することでカーネルの再構築を 先に延ばす事も出来ます。

StreamServerPort: cannot bind to port

このメッセージが出るときはもはや他には postmaster プロセスが走っていないということです。簡単に確かめるため BSD ベースのシステムでは

% ps -ax | grep postmaster
	
または、System V 系、HP-UX のような POSIX 準拠のシステムでは
% ps -e | grep postmaster
	
のようにします。

他には postmaster が立ち上がっていないことが確認されたにも関らず、このエラー が引続き出るときは -p オプションを使って異なるポートを指定してみて下さい。 postmaster を停止し、そのポートですぐに再立ち上げした場合、エラーが 出る場合があります。このときは、オペレーティングシステムが ポートを閉鎖するまで数秒待ってから単に再トライしてください。 最後に、オペレーティングシステムが予約しているポート番号を 指定するとこのエラーがでます。例えば、Unix の多くのバージョン では 1024 より小さいポート番号は 信託 と見なされていて、Unix のスーパユーザ以外アクセス出来ません。

IpcMemoryAttach: shmat() failed: Permission denied

ありそうな事として、他のユーザが postmaster プロセスを共有リソースを取得済の同じポートで開始させよう として終了した場合です。 Postgres の共有メモリキーは postmaster に割り付けたポート番号をもとにしているので、 このような衝突は一台のホストに複数のインストレーションが 存在する場合起こり得ることです。 もしも他に postmaster プロセスが現在走っていないなら(上記参照)、 ipcclean を実行してから、再トライしてみてください。 もし他の postmaster イメージ が走っていれば、それらのプロセスの所有者を発見して ポート番号の割当の調整および未使用の共有メモリセグメントの 削除といった対策が取れます。

説明

postmaster はフロントエンドとバックエンドプロセス間の通信を制御すると共に 共有バッファプールと SysV セマフォの配分を(試行設定指示のない 機械の場合)行います。 postmaster 自身はユーザと接触しないので、バックグランドプロセスとして 起動されなければなりません。

ある与えられた Postgres インストレーションではある時点でたった一つだけの postmaster が走っていなければなりません。 ここでインストレーションとはデータベースのディレクトリと postmaster のポート番号を 言います。もし複数の postmaster を同じマシン上で動かす 場合はそれぞれが異なったディレクトリとポート番号を持って いなければなりません。

注意事項

出来るのであれば、 postmaster を終了するのに SIGKILL使わないで下さい。 代わりに SIGHUPSIGINT、 または (kill(1) のデフォルトシグナル) SIGTERM を使うべきです。

% kill -KILL
   
またはその別の形式
% kill -9
   
postmaster が 終了以前に保持するシステムリソース(例えば共有メモリ とかセマフォ)を開放することを防ぎます。そして、前で 説明した共有メモリ問題の遭遇にたいする防御にもなります。

共有メモリ問題を扱う有用なユーティリティには、 ipcs(1)ipcrm(1) そして ipcclean(1)があります。

使用法

postmaster をデフォルト値で 起動するには、

% nohup postmaster >logfile 2>&1 &
   
と入力します。 このコマンドは postmaster を デフォルトポート(5432)で起動します。 これが最も単純で一般的な postmaster の起動です。

postmaster を特別なポートと 実行可能名で起動するには

% nohup postmaster -p 1234 &
   
とします。 このコマンドは postmaster を ポート 1234 を通じて通信するように起動します。この postmaster に psql で接続するには
% psql -p 1234
   
または、環境変数 PGPORT の設定で
% setenv PGPORT 1234
% psql
   
. のようにします。