postgres [-A 0 | 1 ] [-B nbuffers] [-c name=value] [-d debug-level] [--describe-config] [-D datadir] [-e] [-E] [-f s | i | t | n | m | h ] [-F] [-N] [-o filename] [-O] [-P] [-s | -t pa | pl | ex ] [-S work-mem] [-W seconds] [--name=value] database
postgres [-A 0 | 1 ] [-B nbuffers] [-c name=value] [-d debug-level] [-D datadir] [-e] [-f s | i | t | n | m | h ] [-F] [-o filename] [-O] [-p database] [-P] [-s | -t pa | pl | ex ] [-S work-mem] [-v protocol] [-W seconds] [--name=value]
postgres実行プログラムは、実際の問い合わせ処理を行うPostgreSQLサーバプロセスです。 通常、このプログラムが直接呼び出されることはありません。 代わりにpostmasterマルチユーザサーバが起動されます。
上から2番目の構文は、postgresがどのようにpostmasterから呼び出されるかを表しています(これは概念的なものに過ぎません。 なぜならpostmasterとpostgresは実際には同じプログラムだからです)。 このプログラムをこのような方法で直接に呼び出すべきではありません。 最初の構文では、サーバを対話的なシングルユーザモードで直接呼び出します。 このモードが使われるのは、主にinitdbによるブートストラップ中です。 デバッグや災害からの復旧のために使用されることもあります。
シェルから対話モードで呼び出された場合、ユーザが問い合わせを入力すると結果はスクリーン上に表示されますが、エンドユーザよりも開発者向きの形式で出力されます。 しかし、シングルユーザモードで起動したサーバはサーバのデバッグには不適です。 なぜなら、実運用時のようなプロセス間通信とロックが発生しないからです。
スタンドアロンサーバを起動する際、セッションユーザはユーザID 1と設定されます。 このユーザは実際に存在していなくても構いません。 このため、スタンドアロンサーバは、システムカタログの偶発的な損害などから手動で復旧するために使用することができます。 スタンドアロンモードでは、ユーザID 1のユーザは、暗黙的にスーパーユーザ権限が与えられます。
postgresがpostmasterから起動された場合、postmasterで設定された全てのオプションを継承します。
postgres固有のオプションはpostmasterから-o
オプションで渡すことができます。
設定ファイルに記述しておけば、これらのオプションを入力する手間を省くことができます。 詳細は第17章を参照してください。 いくつかの(安全な)オプションは接続しているクライアントからアプリケーションに依存する方法で設定することができます。 例えば、PGOPTIONS環境変数が設定されると、libpqに基づくクライアントは、その文字列をサーバに渡し、サーバはそれをpostgresのコマンドラインオプションとして解釈します。
-A
、-B
、-c
、-d
、-D
、-F
、および--name
の各オプションは、-d 0がpostmasterのサーバログレベルのpostgresへの伝搬を禁止するという点を除き、postmasterの場合と同じです。
-e
デフォルトの日付データ形式を"ヨーロッパ式"にします。これにより、日付の入力時の順番はDMYになります。 また、日付の出力時にも、月の前に日にちを置いた書式で表示されるようになります。 詳細は項8.5を参照してください。
-o
filename全てのサーバログをfilenameに送ります。 postgresがpostmasterの下で稼動している場合、このオプションは無視され、標準エラー出力stderrはpostmasterから引き継がれます。
-P
システムテーブルの読み込みの際にシステムインデックスを無視します (しかし、システムテーブルの更新の際にはインデックスは更新されます)。 破損したシステムインデックスから復旧する場合に有用です。
-s
時刻情報とその他の統計情報をそれぞれのコマンドの最後に表示します。 ベンチマークとして利用する場合や、バッファ数の調整を行う場合に便利です。
-S
work-mem一時ディスクファイルを再ソートする前に、内部ソートとハッシュに使われるメモリ量を指定します。
項17.4.1のwork_mem
設定パラメータの説明を参照してください。
アクセスするデータベースの名前を指定します。 省略されると、デフォルトではユーザ名になります。
-E
全てのコマンドをエコー表示します。
-N
改行文字の文の区切り文字としての使用を無効にします。
その他にも、主にデバッグ用に使われるオプションをいくつか指定することができます。 これらのオプションを列挙しておくのは、PostgreSQLシステム開発者のためです。 これらのオプションはむやみに使用しないでください。 さらに、これらのオプションは、いずれも将来のリリースで予告なしに変更・廃止される可能性があります。
-f
{ s | i | m | n | h }特定のスキャンと結合メソッドの使用を禁止します。 sはシーケンシャルスキャン、iはインデックススキャンを無効にします。nはネストループ結合、mはマージ結合、hはハッシュ結合を無効にします。
注意: シーケンシャルスキャンとネストループ結合は、完全に無効にすることはできません。 -fsオプションと-fnオプションは、単に「他の選択肢があるならば、これらの種類の計画を使わないようにする」ということをオプティマイザに指示するだけです。
-O
システムテーブルの構造の変更を可能にします。 これはinitdbによって使われます。
-p
databaseプロセスがpostmasterによって起動されたことを示します。また、使用するデータベースを指定します。 その他にもいくつか機能があります。
-t
pa[rser] | pl[anner] | e[xecutor]主要なシステムモジュールに関連する問い合わせに対し、個別に時間に関する統計情報を表示します。
このオプションは-s
オプションと一緒に使うことはできません。
-v
protocolこのセッションで使われるフロントエンド/バックエンドプロトコルのバージョン番号を指定します。
-W
secondsこのオプションが入力されると、プロセスは指定された秒の間休止状態に入ります。 開発者がサーバプロセスにデバッガを接続する時間が必要な場合に使用されます。
--describe-config
このオプションは、サーバの内部設定変数、説明、デフォルトをタブ区切りのCOPY書式で出力します。 これは主に、管理ツールでの使用のために設計されました。
実行中の問い合わせを中止するには、そのコマンドを実行しているpostgresプロセスにSIGINTシグナルを送信してください。
postgresに設定ファイルを再読み込みさせるには、SIGHUPシグナルを送信してください。 しかし、通常は、postmasterにSIGHUPを送信する方法の方が優れています。 この場合、postmasterは、それぞれの子プロセスにSIGHUPを順番に送信します。 しかし、特定のpostgresだけに、設定ファイルを再読み込みさせたい場合もあります。
postmasterでは、postgresプロセスを通常通りに終了させるにはSIGTERMを、通常のクリーンアップを行わずに終了させるにはSIGQUITを使用します。 これらはユーザが使用すべきではありません。 また、postgresにSIGKILLシグナルを送信するのは好ましくありません。 postmasterはこれをpostgresのクラッシュとして解釈するので、クラッシュからの標準的な復旧手続きの一環として、強制的に共通の親プロセスを持つpostgresプロセスを全て終了させます。
コマンドを使ってスタンドアロンサーバを起動するには次のように入力します。
postgres -D /usr/local/pgsql/data other-options my_database
データベースディレクトリの正確なパスを-D
で指定します。パスを指定しない時は、必ずPGDATA環境変数を設定しておいてください。
また、作業対象とするデータベースの名前も指定してください。
通常、スタンドアロンサーバでは、改行をコマンド入力の終わりとみなします。 psqlにおけるセミコロンのような高度な機能はありません。 コマンドが複数行にわたる場合は、改行を入力する前にバックスラッシュを入力しなければなりません(最終行を除く)。
ただし、-N
コマンドラインスイッチを使用した場合は、改行がコマンド入力の終わりとはみなされません。
サーバは標準入力をファイル終端マーク(EOF)まで読み取り、そこまでの入力を1つのコマンド文字列として処理します。
この場合、バックスラッシュと改行の組み合わせは特別扱いされません。
セッションを終了するには、EOF(通常Control+D)を入力します。
-N
を使用している場合、終了するためにEOFを2度連続して入力する必要があります。
スタンドアロンサーバには、高度な行編集機能が用意されていないことに注意してください(例えばコマンド履歴機能はありません)。