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によって管理されています。 データベースクラスタとは、共通のファイルシステム領域("データ領域")に格納されているデータベースの集まりのことです。 1つのシステム上で、同時に複数のpostmasterプロセスを実行することは可能ですが、それらは異なるデータ領域と、異なる接続ポート(下記参照)を使用する必要があります。 データ領域はinitdbを使用して作成されます。
postmasterは、起動時にデータ領域の場所を認識する必要があります。
この場所は-D
オプション、あるいはPGDATA環境変数によって指定されます。
デフォルト値はありません。
通常-D
オプションやPGDATAには、initdbで作成したデータ領域ディレクトリを指定します。
他の可能なファイルレイアウトについては項17.2で説明します。
postmasterには、下記のコマンドライン引数を指定できます。 オプションに関する詳細は第17章を参照してください。 また、設定ファイルを使用することによって、これらを入力する手間を省くことができます。
-A 0|1
実行時にアサーションチェックを行い、プログラムの不具合を検知するデバッグを補助します。 このオプションは、PostgreSQLのコンパイル時にアサーションが有効にされた場合にのみ、使用可能となります。 この場合、デフォルトで有効になります。
-B nbuffers
サーバプロセスが使用する共有バッファの数を設定します。 このパラメータのデフォルト値はinitdbにより自動的に決まります。 詳細な情報については項17.4.1を参照してください。
-c name=value
名前付き実行時パラメータを設定します。
PostgreSQLでサポートされる設定パラメータは第17章で説明します。
実際には、他の多くのコマンドラインオプションは、このようなパラメータへの代入を簡略化したものです。
-c
は複数のパラメータを設定するために複数個使用することができます。
-d debug-level
デバッグレベルを設定します。 大きな値が設定されているほど、より多くのデバッグ情報がサーバのログに出力されます。 値として設定できる範囲は、1から5までです。
-D datadir
ファイルシステム上のデータディレクトリの場所や設定ファイルの場所を指定します。 詳細は項17.2を参照してください。
-F
パフォーマンス向上のためにfsync
呼び出しを無効とします。ただしこの場合、システムクラッシュ時にデータが損傷する危険性があります。
このオプションの指定は、fsync設定パラメータを無効にすることと同一です。
このオプションを使用する時は、事前に詳細情報が書かれたドキュメントを一読してください。
--fsync=true
は、このオプションの逆を表します。
-h hostname
postmasterがクライアントアプリケーションとの接続を監視するIPホスト名、または、IPアドレスを指定します。 この値には、カンマで区切ったアドレスの一覧だけでなく、全ての利用可能なインタフェースを監視することを意味する*を指定することができます。 空の値を指定すると、IPアドレスをまったく監視しないことを意味します。 この場合、postmasterへの接続には、Unixドメインソケットのみが使用されます。 デフォルトでは、localhostのみを監視します。 このオプション指定はlisten_addresses設定パラメータを設定することと同一です。
-i
リモートクライアントからのTCP/IP(インターネットドメイン)経由の接続を可能とします。
このオプションを設定しない場合には、ローカルからの接続のみが使用可能となります。
このオプションは、postgresql.conf内のlisten_addresses
を設定すること、あるいは-h
を*に設定することと同じ意味を持ちます。
このオプションは、listen_addressesの全ての機能を実現することができないため廃止が予定されています。
通常は、直接listen_addresses
を設定する方法をお勧めします。
-k directory
postmasterがクライアントアプリケーションからの接続を監視するUnixドメインソケットのディレクトリを指定します。 デフォルトでは、通常/tmpとなっていますが、これは構築時に変更できます。
-l
SSLを使用して、安全な接続を行います。 このオプションを使用するためには、PostgreSQLのコンパイル時にSSLを有効にする必要があります。 SSLの使用に関する詳細は項16.7を参照してください。
-N max-connections
postmasterが受け付けるクライアント接続数の最大値を設定します。
デフォルトでは32となっていますが、システムがサポートできる最大プロセス数まで設定することが可能です
(-B
オプションは、-N
で指定した数の少なくとも2倍以上に設定されている必要があります。
詳しくは項16.4、多数のクライアントが接続する場合のシステムリソースに対する要求事項についての節を参照してください)。
このオプションの指定は、max_connections設定パラメータを設定することと同じ意味を持ちます。
-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
postmasterがSIGSTOPシグナルを送って他の全てのサーバプロセスを停止させます。 ただし、終了はさせません。 これにより、システムプログラマは全てのサーバプロセスから手動でコアダンプを収集できます。
クライアントが使用するデフォルトの文字符号化方式です (各クライアントでは、これを個々に上書きすることができます)。 この値は設定ファイル内でも設定できます。
デフォルトのデータディレクトリの場所です。
DateStyle実行時パラメータのデフォルト値です (この環境変数の使用は現在では推奨されていません)。
デフォルトのポートです(設定ファイル内で設定することをお勧めします)。
サーバのタイムゾーンです。
semgetやshmgetについて言及するエラーメッセージは、おそらく、適切な共有メモリやセマフォを提供できるようにカーネルを再構築する必要があることを示します。 詳細は項16.4を参照してください。
ティップ: ただし、shared_buffersの値を小さくしてPostgreSQLの共有メモリ消費量を低減する、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 work_mem=1234 $ postmaster --work-mem=1234
どちらの方法も、postgresql.conf内でwork_mem
が指定されていても、その値を上書きします。
パラメータ名のアンダースコアは、コマンドラインではアンダースコアだけでなくダッシュでも表すことができるので注意してください。
ティップ: まだ歴史は浅いですが、パラメータの設定は、コマンドラインで行うよりもpostgresql.conf内の設定を変更する方がおそらくより良い方法です。