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 つのシステム上で同時に、複数の postmaster プロセスを実行することは可能ですが、それらは異なったデータ領域を使用し、異なった接続ポート (下記参照) を使用する必要があります。 データ領域は initdb を使用して作成されます。
postmaster には、下記のコマンドライン引数を指定できます。 オプションに関する詳細は 項16.4 を参照して下さい。 また、設定ファイルを使用することによって、これらを入力する手間を省くことができます。
プログラムのデバッグの補助を行うために、実行中の表明 (アサーション) チェックを行います。 これは、コンパイル時に有効にされた場合にのみ、使用可能となります。 その場合、デフォルトでは、有効になります。
サーバプロセスが使用する共有バッファの数を設定します。 デフォルトでは 64 バッファで、1 つのバッファは 8kB です。
名前付き実行時パラメータを設定します。 そのリストと説明は 項16.4 を参照して下さい。 実際、他の多くのコマンドラインオプションというのは、こうしたパラメータの代入についての簡略形です。 -c は複数のパラメータを設定するために複数個使用することができます。
デバッグレベルを設定します。 大きい数が設定されている場合は、より多くのデバッグ用出力がサーバのログに書かれます。 値は、1 から 5 までを設定できます。
ファイルシステム上のデータディレクトリの場所を指定します。上記の説明を参照して下さい。
パフォーマンス向上のために、システムクラッシュ時におけるデータ損傷の危険を覚悟で、fsync 呼び出しを無効とします。 このパラメータは、postgresql.conf 内の fsync=false の設定に対応しています。このオプションを使用する前には詳細なドキュメントを読んで下さい。
--fsync=true は、このオプションの逆の意味になります。
postmaster がクライアントアプリケーションとの接続を監視する IP ホスト名、または、IP アドレスを指定します。 デフォルトでは、設定済みの全てのアドレス (localhost を含む) を監視します。
クライアントと TCP/IP (インターネットドメイン) 経由で接続を可能とします。 このオプションを設定しない場合には、ローカル Unix ドメインソケット接続のみが使用可能となります。 このオプションは postgresql.conf 内の tcpip_socket=true の設定に対応します。
--tcpip_socket=false は、このオプションの逆の意味になります。
postmaster がクライアントアプリケーションからの接続を監視する Unix ドメインソケットのディレクトリを指定します。 デフォルトでは、通常 /tmp となっていますが、これは構築時に変更できます。
SSL を使用して、安全な接続を行います。-i も一緒に必要となります。このオプションを使用するためには、SSL がコンパイル時に有効になっている必要があります。
postmaster が受け付けるクライアント接続数の最大値を設定します。 デフォルトでは 32 となっていますが、システムがサポートできる最大プロセス数までまで設定することが可能です。 (-B オプションは、-N で指定した数の少なくとも 2 倍の値に設定されている必要があります。項16.5 の、多数のクライアント接続用のシステムリソースに対する要求事項に関する節を参照して下さい。)
extra-options で指定されたコマンドラインオプションは、この postmaster により開始されたすべてのサーバプロセスに引き渡されます。 設定可能な値については postgres を参照して下さい。 このオプションの文字列に空白文字が含まれている場合には、文字列全体を引用符で括る必要があります。
クライアントアプリケーションからの接続を postmaster が監視する TCP/IP ポート、またはローカル Unix ドメインソケットファイルの拡張子を指定します。 デフォルトでは、PGPORT 環境変数、また、もし PGPORT が設定されていない場合にはコンパイル時に設定された値 (通常 5432) が使用されます。 デフォルトのポート以外を指定した場合には、すべてのクライアントアプリケーションは、コマンドラインオプション、または PGPORT を使用して、同じポートを指定する必要があります。
postmaster プロセスがサイレントモードで起動することを指定します。 つまり、ユーザの (管理) 端末から独立し、独自のプロセスグループを開始し、そして、標準出力と標準エラー出力を /dev/null にリダイレクトします。
この機能を使用する場合、すべてのログ出力を廃棄してしまいます。 しかし、これは問題を解決するときなどにはとても不便になってしまいますので、望ましくありません。 postmaster をバックグランドで起動させるよりよい方法を後で示します。
--silent_mode=false は、このオプションの逆の意味になります。
名前付き実行時パラメータを設定します。 -c の短縮形式です。
サーバプロセスが異常終了してしまうような問題のデバッグ用として、更に 2 つのコマンドラインオプションが用意されています。 この状況に対する通常の方策は、他の全てのバックエンドに対し、終了が必要であること、またその後共有メモリとセマフォの再初期化が必要であることを通知することです。 これは、不安定になっているサーバプロセスが終了する前に、何か共有状態を破壊する恐れがあるためです。 これらのオプションはこのような状況における postmaster の代替の動作を選択します。 いずれのオプションも通常の操作を目的としているものではありません。
これらの特別の場合のオプションとは下記のものです。
postmaster は共有データ構成を再初期化しません。 これにより、知識が豊富なシステムプログラマは共有メモリとセマフォ状況の調査のためにデバッガを使用できます。
postmaster は SIGSTOP シグナルを送って他の全てのサーバプロセスを停止させます。 ただし、終了はさせません。 これにより、システムプログラマは全てのサーバプロセスから手動でコアダンプを収集できます。
クライアントが使用するデフォルトの文字符号化方式です。 (各クライアントは、これを個々に上書きすることができます。) この値は設定ファイル内でも設定できます。
デフォルトのデータ保存場所です。
datestyle 実行時パラメータのデフォルト値です。 (この環境変数の使用は現在では推奨されていません。)
デフォルトのポートです (設定ファイル内で設定することをお勧めします)。
サーバのタイムゾーンです。
代替のデータ格納場所を指定するために、その他の環境変数を使用することができます。 詳細については 項18.5 を参照して下さい。
semget や shmget に言及した失敗メッセージは、おそらく、適切な共有メモリやセマフォを提供できるようにカーネルを再構築する必要があることを示します。 より詳しくは 項16.5 を参照してください。
ティップ: PostgreSQL の共有メモリ消費量を低減するために shared_buffers を低くすること、セマフォ消費量を低減するために max_connections を低くすることのどちらか、もしくは、両者を行なうことでカーネルの再構築を先に延ばすこともできます。
他のpostmasterが既に実行中であることを示す失敗メッセージに対しては、例えば以下のコマンドを使用して、注意深く検査しなければなりません。
$ ps ax | grep postmaster
もしくは
$ ps -ef | grep postmaster
システムによって異なります。 postmasterの稼働が競合していないことが確実ならば、メッセージ内で示されたロックファイルを削除して、再度試してください。
ポートをバインドできなかったことを示す失敗メッセージの場合は、他のPostgreSQLプロセスが既にそのポートを使用しているかも知れません。 また、postmaster を停止させ、そのポートですぐに再立ち上げした場合は、エラーが出ることがあります。 この場合、オペレーティングシステムがポートを閉鎖するまで数秒待ってから再挑戦して下さい。 最後に、オペレーティングシステムが予約しているポート番号を指定した場合、エラーがでる場合があります。 例えば、Unix の多くのバージョンでは 1024 より小さいポート番号は "信頼できる (trusted)" と見なされていて、Unix のスーパーユーザ以外アクセスできません。
可能な限り、postmaster を終了させるために SIGKILL を使用しないで下さい。 これにより、postmaster が保持しているシステムリソース (共有メモリやセマフォ) を解放する前に終了してしまうことを防止することができます。 これは、最初からpostmaster を起動する時に問題になるかもしれません。
postmaster を普通に終了させるには、SIGTERM、SIGINT、または 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 を指定していたとしても、その値を上書きします。パラメータ名内のアンダースコアは、コマンドラインではダッシュでもアンダースコアでも表すことができることに注意して下さい。
ティップ: まだ歴史が浅いものですが、パラメータの設定は、コマンドラインで行なうよりも postgresql.conf 内の設定を変更する方がおそらくより良い方法です。