【JPUG主催】PostgreSQLカンファレンス2020【11月13日開催】
他のバージョンの文書 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

postmaster

名前

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

概要

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オプションやPGDATAinitdbで作成したデータ領域ディレクトリを指定します。 他のファイルレイアウトの可能性について項16.4.1で説明します。

オプション

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

-A 0|1

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

-B nbuffers

サーバプロセスが使用する共有バッファの数を設定します。 このパラメータのデフォルト値はinitdbにより自動的に決まります。 詳細な情報については項16.4.3.1を参照してください。

-c name=value

名前付き実行時パラメータを設定します。 PostgreSQLでサポートされる設定パラメータは項16.4で説明します。 実際、他の多くのコマンドラインオプションというのは、こうしたパラメータの代入についての簡略形です。 -cは複数のパラメータを設定するために複数個使用することができます。

-d debug-level

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

-D datadir

ファイルシステム上のデータディレクトリの場所や設定ファイルの場所を指定します。 詳細は項16.4.1を参照してください。

-F

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

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

-h hostname

postmasterがクライアントアプリケーションとの接続を監視するIPホスト名、または、IPアドレスを指定します。 この値には、空白で区切ったアドレスの一覧を指定することも、全ての利用可能なインタフェースを監視することを意味する*を指定することもできます。 空の値はIPアドレスを全く監視しないことを指定するものです。 この場合はUnixドメインソケットのみがpostmasterへの接続に使用されます。 デフォルトでは、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.8を参照してください。

-N max-connections

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

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

環境

PGCLIENTENCODING

クライアントが使用するデフォルトの文字符号化方式です。 (各クライアントは、これを個々に上書きすることができます。) この値は設定ファイル内でも設定できます。

PGDATA

デフォルトのデータディレクトリの場所です。

PGDATESTYLE

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

PGPORT

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

TZ

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

診断

semgetshmgetに言及した失敗メッセージは、おそらく、適切な共有メモリやセマフォを提供できるようにカーネルを再構築する必要があることを示します。 詳細は項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を普通に終了させるには、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 work_mem=1234
$ postmaster --work-mem=1234

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

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

関連項目

initdb, pg_ctl