postmaster

Name

postmaster -- PostgreSQL マルチユーザデータベースサーバ

Synopsis

postmaster [-A 0 | 1 ] [-B nbuffers] [-c name=value] [-d debug-level] [-D datadir] [-F] [-h hostname] [-i] [-k directory] [-l] [-N max-connections] [-o extra-options] [-p port] [-S] [--name=value] [-n | -s]

説明

postmaster は、PostgreSQL のマルチユーザデータベースサーバです。クライアントアプリケーションがデータベースに接続するためには、稼働している postmaster に (ネットワークを介して、またはローカルで) 接続する必要があります。その後、postmaster は接続を操作するために別のサーバプロセス ("postgres") を開始します。また、postmaster は、サーバプロセス間の管理も行います。

デフォルトで、postmaster はフォアグラウンドで開始し、標準出力にログメッセージを出力します。一般的なアプリケーションでは、postmaster はブート時などに、バックグランドプロセスとして開始させると良いでしょう。

1 つのデータベースクラスタのデータは、必ず 1 つの postmaster によって管理されています。データベースクラスタとは、同じファイルシステムの場所に格納されているデータベースの集まりのことです。postmaster が起動する時、postmaster はデータベースクラスタファイルの場所 ("データ領域") を識別する必要があります。これは PGDATA 環境変数、または -D 起動オプションで行われます。 また、それらのデフォルト設定はありません。1 つのシステム上で同時に、1 つ以上の postmaster プロセスを実行することは可能ですが、それらは異ったデータ領域を使用し、異った接続ポート (下記参照) を使用する必要があります。データ領域は initdb を使用して作成されます。

オプション

postmaster には、下記のコマンドライン引数を指定できます。オプションに関する詳細は 管理者用ガイド を参照して下さい。また、設定ファイルを使用することによって、入力する手間を省けます。

-A 0|1

プログラムのデバッグの補助を行うために、実行中の表明 (アサーション) チェックを行います。これは、コンパイル時に有効にされた場合にのみ、使用可能となります。その場合、デフォルトでは、有効になります。

-B nbuffers

サーバプロセスが使用する共有バッファの数を設定します。デフォルトでは 64 バッファで、1 つのバッファは 8kB です。

-c name=value

名前付き実行時パラメータを設定します。そのリストと説明は 管理者用ガイド を参照して下さい。実際、他の多くのコマンドラインオプションというのは、それらの引数指定の簡略形です。-c は複数のパラメータを設定するために複数個使用することができます。

-d debug-level

デバッグレベルを設定します。大きい数が設定されている場合は、より多くのデバッグの出力がサーバのログに書かれます。 値は、1 から 5 までを設定できます。

-D datadir

ファイルシステム上のデータディレクトリの場所を指定します。上記の説明を参照して下さい。

-F

パフォーマンス向上のために、システムクラッシュ時におけるデータ損傷の危険を覚悟で、fsync 呼び出しを無効とします。 このパラメータは、postgresql.conf 内の fsync=false の設定に対応しています。このオプションを使用する前には詳細なドキュメントを読んで下さい。

--fsync=true は、このオプションの逆の意味になります。

-h hostname

postmaster がクライアントアプリケーションとの接続を監視する TCP/IP ホスト名、またはアドレスを指定します。デフォルトでは、設定済みの全てのアドレス (localhost を含む) を監視します。

-i

クライアントと TCP/IP (インターネットドメイン) 経由で接続を可能とします。このオプションを設定しない場合には、ローカル Unix ドメインソケット接続のみが使用可能となります。 このオプションは postgresql.conf 内の tcpip_socket=true の設定に対応します。

--tcpip_socket=false は、このオプションの逆の意味になります。

-k directory

postmaster がクライアントアプリケーションからの接続を監視する Unix ドメインソケットのディレクトリを指定します。デフォルトでは、通常 /tmp となっていますが、これはビルドの際に変更できます。

-l

SSL を使用して、安全な接続を行います。-i も一緒に必要となります。このオプションを使用するためには、SSL がコンパイル時に有効になっている必要があります。

-N max-connections

postmaster が受け付けるクライアント接続の最大値を設定します。デフォルトでは 32 となっていますが、システムがサポートできる最大プロセス数までまで設定することが可能です。(-B オプションは、-N で指定した数の少なくとも 2 倍の値に設定されている必要があります。管理者用ガイド の、多数のクライアント接続用のシステムリソースに対する要求事項に関する節を参照して下さい。)

-o extra-options

extra-options で指定されたコマンドラインオプションは、この postmaster により開始されたすべてのバックエンドサーバプロセスに引き渡されます。postgres を参照して下さい。このオプションの文字列にスペースが含まれている場合には、文字列全体をクォートする必要があります。

-p port

クライアントアプリケーションからの接続を postmaster が監視する TCP/IP ポート、またはローカル Unix ドメインソケットファイルの拡張子を指定します。デフォルトでは、PGPORT 環境変数、または PGPORT が設定されていない場合にはコンパイル時に設定された値 (通常 5432) が使用されます。デフォルトのポート以外を指定した場合には、すべてのクライアントアプリケーションは、コマンドラインオプション、または PGPORT を使用して、同じポートを指定する必要があります。

-S

postmaster プロセスがサイレントモードで起動することを指定します。つまり、ユーザの (管理) ターミナルから独立し、独自のプロセスグループを稼働し、また、標準出力と標準エラーを /dev/null にリダイレクトします。

この機能を使用する場合、すべてのログ出力を廃棄してしまいます。しかし、これは問題を解決するときなどにはとても不便になってしまいますので、望ましくありません。postmaster をバックエンドとして起動させるよりよい方法は、下記を参照して下さい。

--silent_mode=false は、このオプションの逆の意味になります。

--name=value

名前付き実行時パラメータを設定します。 -c の短縮形式です。

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

この状況に対する通常の方策は、他の全てのバックエンドに対し、終了が必要であること、またその後共有メモリとセマフォの再初期化が必要であることを通知することです。これは、不安定になっているバックエンドが終了する前に、何か共有状態を破壊する恐れがあるためです。

これらの特別の場合のオプションとは下記のものです。

-n

postmaster は共有データ構成を再初期化しません。これにより、知識が豊富なシステムプログラマは共有メモリとセマフォ状況の調査のためにデバッガを使用できます。

-s

postmasterSIGSTOP シグナルを送って他の全てのバックエンドプロセスを停止させます。 ただし、終了はさせません。これにより。システムプログラマは全てのバックエンドプロセスから手動でコアダンプを収集できます。

環境

PGCLIENTENCODING

クライアントが使用するデフォルトの文字エンコーディングです。 (各クライアントは、これを個々にオーバーライドすることができます。) この値も設定ファイル内で設定できます。

PGDATA

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

PGDATASTYLE

datestyle 実行時パラメータのデフォルト値です。 (この環境変数の使用は現在では推奨されていません。)

PGPORT

デフォルトのポートです (設定ファイル内で設定することをお勧めします)。

TZ

サーバのタイムゾーンです。

その他

代替のデータ格納場所を指定するために、その他の環境変数を使用することができます。詳細については 管理者用ガイド を参照して下さい。

診断

semget:No space left on device

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

Tip: PostgreSQL の共有メモリ消費量を低減するために -B を低くすること、セマフォ消費量を低減するために -N を低くすることのどちらか、もしくは、両者を行なうことでカーネルの再構築を先に延ばすこともできます。

StreamServerPort:cannot bind to port

このメッセージが出るときは、他の postmaster プロセスが同じポート番号で稼働していないかを確認して下さい。これは、下記のコマンドを実行することによって、容易に分かります。

$ ps ax | grep postmaster

もしくは

$ ps -e | grep postmaster

システムによって、異なります。

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

注釈

可能であるならば、postmaster を終了させるためには SIGKILL使用しないで下さい。これは、postmaster が保持しているシステムリソース (共有メモリやセマフォ) を解放する前に終了させてしまうためです。

postmaster を普通に終了させるには、SIGTERMSIGINT、または SIGQUIT を使用することができます。SIGTERM は終了させる前に、すべてのクライアントが終了するまで待ちます。 SIGINT は強制的にすべてのクライアントを終了させて終了します。 SIGQUIT は適切なシャットダウンを行わないで、即時に終了します。 この場合は、次回の起動時に復旧処理を行います。

ユーティリティコマンド pg_ctl は、postmaster の起動とシャットダウンを安全、かつ使い勝手良くに行うためのものです。

-- オプションは FreeBSD または OpenBSD では動作しません。代わりに -c オプションを使用して下さい。このバグはオペレーティングシステムによるものです。 PostgreSQL の今後のリリースで、このバグが解決できなかった場合は、回避方法を用意する予定です。

postmaster をデフォルト値を使用してバックグランドで起動するためには、下記のコマンドを使用して下さい。

$ nohup postmaster >logfile 2>&1 </dev/null &

postmaster を特定のポートで起動させるには、 下記のようなコマンドを実行して下さい。

$ postmaster -p 1234

このコマンドは、ポート 1234 を使用してpostmaster を起動します。 psql を使用してこの postmaster に接続する場合は、下記のようにコマンドを入力します。

 
$ psql -p 1234

あるいは、環境変数 PGPORT を下記のように設定します。

$ export PGPORT=1234
$ psql

名前付き実行時パラメータは、以下のどちらの方法でも設定できます。

$ postmaster -c sort_mem=1234
$ postmaster --sort-mem=1234

どちらの方法も、postgresql.conf 内で sort_mem を指定していたとしても、その値を上書きします。パラメータ名内のアンダースコアは、コマンドラインではダッシュでもアンダースコアでも表すことができることに注意して下さい。

Tip: まだ歴史が浅いものですが、パラメータの設定は、コマンドラインで行なうよりも postgresql.conf 内の設定を変更する方がおそらくより良い方法です。

関連項目

initdb, pg_ctl