postgresは、PostgreSQLのデータベースサーバです。 クライアントアプリケーションがデータベースに接続するためには、稼働中のpostgresインスタンスに(ネットワークを介して、またはローカルで)接続する必要があります。 その後、postgresは接続を取り扱うために別のサーバプロセスを開始します。
1つのpostgresインスタンスは常に1つのデータベースクラスタのデータを管理します。。 データベースクラスタとは、共通のファイルシステム領域("データ領域")に格納されているデータベースの集まりのことです。 1つのシステム上で、同時に複数のpostmasterインスタンスを実行することは可能ですが、それらは異なるデータ領域と、異なる接続ポート(下記参照)を使用する必要があります。 postgresは、その起動時にデータ領域の場所を知らなければなりません。 その場所を-DオプションまたはPGDATA環境変数によって指定しなければなりません。デフォルト値はありません。 通常、-DまたはPGDATAは、initdbで作成されたデータ領域ディレクトリを直接指し示します。 他のファイルレイアウトを取ることもできます。項18.2を参照してください。
デフォルトでは、postgresはフォアグランドで起動し、ログメッセージを標準エラー出力に出力します。 実運用では、postgresアプリケーションはおそらくマシン起動時にバックグランドで起動されるはずです。
またpostgresはシングルユーザモードで呼び出すこともできます。 このモードは、主にinitdbによる初期化処理の中で使用されます。 これを、デバッグのためや災害からの復旧時に使用することもできます。 (しかし、実際には発生するはずのプロセス間通信やロック処理が発生しませんので、シングルユーザモードがサーバのデバッグに確実に適したものではないことに注意してください。) シェルからシングルユーザモードで呼び出された場合、ユーザは問い合わせを入力できます。 結果は画面上に表示されますが、その形式はエンドユーザ向けではなく開発者向けのものです。 シングルユーザモードでは、セッションユーザはユーザID 1と設定され、暗黙的にスーパーユーザの能力がこのユーザに与えられます。 このユーザは実際に存在していなくても構いません。 このため、スタンドアロンサーバは、システムカタログの偶発的な損害などから手動で復旧するために使用することができます。
postgresには、下記のコマンドライン引数を指定できます。 オプションに関する詳細は第18章を参照してください。 また、設定ファイルを使用することによって、これらを入力する手間を省くことができます。 一部の(安全な)オプションは接続中のクライアントから設定することもできます。 その設定方法はアプリケーションに依存し、また、そのセッションでのみ適用されます。 たとえば、PGOPTIONS環境変数を設定すると、libpqを基にしたクライアントはその文字列をサーバに渡します。 渡された文字列はpostgresコマンドラインオプションとして扱われます。
実行時にアサーションチェックを行い、プログラムの不具合を検知するデバッグを補助します。 このオプションは、PostgreSQLのコンパイル時にアサーションが有効にされた場合にのみ、使用可能となります。 この場合、デフォルトで有効になります。
サーバプロセスが使用する共有バッファの数を設定します。 このパラメータのデフォルト値はinitdbにより自動的に決まります。 このオプション指定はshared_buffers設定パラメータの設定と同じです。
名前付き実行時パラメータを設定します。 PostgreSQLでサポートされる設定パラメータは第18章で説明します。 実際には、他の多くのコマンドラインオプションは、このようなパラメータへの代入を簡略化したものです。 -cは複数のパラメータを設定するために複数個使用することができます。
デバッグレベルを設定します。 大きな値が設定されているほど、より多くのデバッグ情報がサーバのログに出力されます。 値として設定できる範囲は、1から5までです。 特定のセッションで-d 0を渡すこともできます。 この設定により、親のpostgresプロセスのサーバログレベルがこのセッションに伝播されません。
ファイルシステム上のデータディレクトリの場所や設定ファイルの場所を指定します。 詳細は項18.2を参照してください。
デフォルトの日付データ形式を"ヨーロッパ式"にします。これにより、日付の入力時の順番はDMYになります。 また、日付の出力時にも、月の前に日にちを置いた書式で表示されるようになります。 詳細は項8.5を参照してください。
パフォーマンス向上のためにfsync
呼び出しを無効とします。ただしこの場合、システムクラッシュ時にデータが損傷する危険性があります。
このオプションの指定は、fsync設定パラメータを無効にすることと同一です。
このオプションを使用する時は、事前に詳細情報が書かれたドキュメントを一読してください。
postgresがクライアントアプリケーションとの接続を監視するIPホスト名、または、IPアドレスを指定します。 この値には、カンマで区切ったアドレスの一覧だけでなく、全ての利用可能なインタフェースを監視することを意味する*を指定することができます。 空の値を指定すると、IPアドレスをまったく監視しないことを意味します。 この場合、サーバへの接続には、Unixドメインソケットのみが使用されます。 デフォルトでは、localhostのみを監視します。 このオプション指定はlisten_addresses設定パラメータを設定することと同一です。
リモートクライアントからのTCP/IP(インターネットドメイン)経由の接続を可能とします。 このオプションを設定しない場合には、ローカルからの接続のみが使用可能となります。 このオプションは、postgresql.conf内のlisten_addressesを、あるいは-hを*に設定することと同じ意味を持ちます。
このオプションは、listen_addressesの全ての機能を実現することができないため廃止が予定されています。 通常は、直接listen_addressesを設定する方法をお勧めします。
postgresがクライアントアプリケーションからの接続を監視するUnixドメインソケットのディレクトリを指定します。 デフォルトでは、通常/tmpとなっていますが、これは構築時に変更できます。
SSLを使用して、安全な接続を行います。 このオプションを使用するためには、PostgreSQLのコンパイル時にSSLを有効にする必要があります。 SSLの使用に関する詳細は項17.8を参照してください。
このサーバが受け付けるクライアント接続数の最大値を設定します。 この値のデフォルト値はinitdbにより自動的に選択されます。 このオプションの指定は、max_connections設定パラメータを設定することと同じ意味を持ちます。
extra-optionsで指定されたコマンドラインオプションは、このpostgresプロセスにより開始された全てのサーバプロセスに引き渡されます。 このオプションの文字列に空白文字が含まれている場合には、文字列全体を引用符で囲む必要があります。
このオプションの使用は非推奨です。 サーバプロセス用のすべてのコマンドラインオプションはpostgresコマンドラインで直接指定することができます。
クライアントアプリケーションからの接続をpostgresが監視するTCP/IPポート、またはローカルUnixドメインソケットファイルの拡張子を指定します。 デフォルトでは、PGPORT環境変数、PGPORTが設定されていない場合はコンパイル時に設定された値(通常5432)が使用されます。 デフォルトのポート以外を指定した場合には、コマンドラインオプション、またはPGPORTを使用して、全てのクライアントアプリケーションが同じポートを指定するようにしなければなりません。
各コマンドの終了時に時間情報や他の統計情報を表示します。 これはベンチマークやバッファ数の調整時の使用に適しています。
一時ディスクファイルで再ソート処理を行う前に内部的なソート処理やハッシュ処理で使用するメモリ量を指定します。 項18.4.1のwork_mem設定パラメータの説明を参照してください。
名前付き実行時パラメータを設定します。 -cの省略形式です。
このオプションは、サーバの内部設定変数、その説明、および、デフォルト値をタブ区切りのCOPY書式でダンプ出力します。 これは、管理用ツールからの使用を主目的として設計されました。
ここで説明するオプションは、主にデバッグ用に、まれに深刻な障害を受けたデータベースの復旧を補助するために使われます。 これらを運用状態のデータベースの設定として使用する理由はないはずです。 これらのオプションを列挙しておくのは、PostgreSQLシステム開発者のためです。 さらに、これらのオプションは、いずれも将来のリリースで予告なしに変更・廃止される可能性があります。
特定のスキャンと結合メソッドの使用を禁止します。 sはシーケンシャルスキャン、iはインデックススキャンを無効にします。nはネストループ結合、mはマージ結合、hはハッシュ結合を無効にします。
シーケンシャルスキャンとネストループ結合は、完全に無効にすることはできません。 -fsオプションと-fnオプションは、単に「他の選択肢があるならば、これらの種類の計画を使わないようにする」ということをオプティマイザに指示するだけです。
これはサーバプロセスが異常終了する問題をデバッグするためのオプションです。 このような状態では、他のすべてのサーバプロセスに対し、終了し、共有メモリやセマフォを再初期化するように通知するのが、通常の戦略です。 エラーが起きたサーバプロセスが、終了する前に、何かしら破損した共有状態を持っていたことが原因かもしれません。 このオプションは、postgresが共有データ構造を再初期化しないように指定します。 知識のあるシステムプログラマであれば、その後にデバッガを使用して共有メモリやセマフォの状態を検証することができます。
システムテーブルの構造の変更を可能にします。 これはinitdbによって使われます。
システムテーブルの読み込みの際にシステムインデックスを無視します (しかし、システムテーブルの更新の際にはインデックスは更新されます)。 破損したシステムインデックスから復旧する場合に有用です。
主要なシステムモジュールに関連する問い合わせに対し、個別に時間に関する統計情報を表示します。 このオプションは-sオプションと一緒に使うことはできません。
これはサーバプロセスが異常終了する問題をデバッグするためのオプションです。 このような状態では、他のすべてのサーバプロセスに対し、終了し、共有メモリやセマフォを再初期化するように通知するのが、通常の戦略です。 エラーが起きたサーバプロセスが、終了する前に、何かしら破損した共有状態を持っていたことが原因かもしれません。 このオプションは、postgresが他のすべてのサーバプロセスに対しSIGSTOPシグナルを送信して、終了させるのではなく停止させることを指定します。 これによりシステムプログラマはすべてのサーバプロセスのコアダンプを手作業で収集することができます。
特定のセッションで使われるフロントエンド/バックエンドプロトコルのバージョン番号を指定します。 このオプションは内部使用のみを目的としたものです。
新規サーバプロセスが起動したときに指定した秒数の遅延が発生します。 認証手続きはこの後で行われます。 サーバプロセスにデバッガを接続する時間を提供することが目的です。
以下のオプションはシングルユーザモードに対してのみ適用されます。
シングルユーザモードを選択します。 これは、コマンドラインで最初の引数でなければなりません。
アクセスするデータベースの名称を指定します。 これはコマンドラインの最後の引数でなければなりません。 省略時は、デフォルトでユーザ名になります。
すべてのコマンドをエコー表示します。
改行文字の文の区切り文字としての使用を無効にします。
全てのサーバログをfilenameに送ります。 通常のマルチユーザモードでは、このオプションは無視され、stderrがすべてのプロセスで使用されます。
クライアントで使用される文字符号化方式のデフォルトです。 (クライアントは個別に変更することができます。) また、この値は設定ファイルでも設定可能です。
デフォルトのデータディレクトリの場所です。
DateStyle実行時パラメータのデフォルト値です。 (この環境変数の使用は廃止予定です。)
デフォルトのポート番号です。 (設定ファイル内で設定するほうが好まれています。)
サーバのタイムゾーンです。
semgetやshmgetについて言及するエラーメッセージは、おそらく、適切な共有メモリやセマフォを提供できるようにカーネルを再構築する必要があることを示します。 詳細は項17.4を参照してください。 ただし、shared_buffersの値を小さくしてPostgreSQLの共有メモリ消費量を低減する、max_connectionsの値を小さくしてセマフォ消費量を低減するといった対策を行うことで、カーネルの再構築を先延ばしすることができます。
他のサーバが既に実行中であることを示すエラーメッセージに対しては、例えば以下のコマンドを使用して、注意深く検査しなければなりません。
$ ps ax | grep postgres
もしくは
$ ps -ef | grep postgres
どちらを使用するかは、システムによって異なります。 競合するサーバが稼働していないことが確実であれば、メッセージ内で示されたロックファイルを削除して、再度試してください。
ポートをバインドできなかったことを示すエラーメッセージの場合は、PostgreSQL以外のプロセスが既にそのポートを使用している可能性が考えられます。 また、postgresを停止して、すぐに同じポートを使う設定で再起動した場合、このエラーが出ることがあります。 この場合、オペレーティングシステムがポートを閉鎖するまで数秒待ってから再挑戦してください。 最後に、オペレーティングシステムが予約しているポート番号を指定した場合も、このエラーが発生することがあります。 例えば、Unixの多くのバージョンでは1024より小さいポート番号は"信頼できる(trusted)"とみなされており、Unixのスーパーユーザ以外アクセスできません。
pg_ctlユーティリティコマンドは、postgresサーバの起動とシャットダウンを安全かつ簡便にするためのものです。
postgresを終了させるためにSIGKILLを使用するのは可能な限り避けてください。 これにより、postgresが保持しているシステムリソース(共有メモリやセマフォ)を解放する前に終了してしまうことを防止できます。 システムリソースが解放されていないと、新しくpostgresを起動する時に問題が起こる可能性があります。
postgresサーバを通常に終了させるために、SIGTERM、SIGINT、SIGQUITを使用することができます。 SIGTERMは、全てのクライアントが終了するのを待ってから終了させます。 SIGINTは、強制的に全てのクライアントとの接続を切断します。 SIGQUITは、適切なシャットダウンを行わないで、即時に終了させます。 この場合、次回の起動時に復旧処理が行われます。
SIGHUPシグナルによりサーバの設定ファイルを再読み込みします。 また、SIGHUPを個々のサーバプロセスに送信することも可能ですが、通常は意味がありません。
実行中の問い合わせを中止するには、そのコマンドを実行しているプロセスにSIGINTシグナルを送信してください。
postgresサーバでは、下位サーバプロセスを通常通りに終了させるにはSIGTERMを、通常のクリーンアップを行わずに終了させるにはSIGQUITを使用します。 これらはユーザが使用すべきではありません。 また、サーバにSIGKILLシグナルを送信するのは好ましくありません。 メインのpostgresはこれをクラッシュとして解釈するので、クラッシュからの標準的な復旧手続きの一環として、強制的に共通の親プロセスを持つpostgresプロセスを全て終了させます。
--オプションはFreeBSDやOpenBSDではうまく動きません。 代わりに-cを使用してください。 これは対象のオペレーティングシステムの不具合です。 もし修正されなければ、将来のPostgreSQLリリースで回避策を提供する予定です。
シングルユーザモードのサーバを起動するには、以下のコマンドを使用してください。
postgres --single -D /usr/local/pgsql/data other-options my_database
データベースディレクトリの正確なパスを-Dで指定します。パスを指定しない時は、必ずPGDATA環境変数を設定しておいてください。 また、作業対象とするデータベースの名前も指定してください。
通常、シングルユーザモードのサーバでは、改行をコマンド入力の終わりとみなします。 psqlにおけるセミコロンのような高度な機能はありません。 コマンドが複数行にわたる場合は、改行を入力する前にバックスラッシュを入力しなければなりません(最終行を除く)。
ただし、-jコマンドラインスイッチを使用した場合は、改行がコマンド入力の終わりとはみなされません。 サーバは標準入力をファイル終端マーク(EOF)まで読み取り、そこまでの入力を1つのコマンド文字列として処理します。 この場合、バックスラッシュと改行の組み合わせは特別扱いされません。
セッションを終了するには、EOF(通常Control+D)を入力します。 -jを使用している場合、終了するためにEOFを2度連続して入力する必要があります。
シングルユーザモードのサーバには、高度な行編集機能が用意されていないことに注意してください(例えばコマンド履歴機能はありません)。
デフォルト値を使用するpostgresをバックグランドで起動するには、以下を入力してください。
$ nohup postgres >logfile 2>&1 </dev/null &
ポートを指定したpostgresを起動するには、以下を入力してください。
$ postgres -p 1234
このコマンドは1234ポートを通じて通信を行うpostgresを起動します。 psqlを使用してこのサーバに接続するには、以下のように実行する必要があります。
$ psql -p 1234
またはPGPORT環境変数を設定する必要があります。
$ export PGPORT=1234 $ psql
名前付き実行時パラメータを以下のいずれかで設定することができます。
$ postgres -c work_mem=1234 $ postgres --work-mem=1234
どちらの形式でも、postgresql.conf内に記載されているかもしれないwork_memの値を上書きします。 コマンドラインでは、パラメータ内のアンダースコア(_)をアンダースコアとしてもダッシュ記号(-)としても記載できることに注意してください。 おそらく短期間の実験という場合を除き、コマンドラインスイッチに依存するよりもpostgresql.conf内の設定を変更してパラメータを設定する方が実用的です。