他のバージョンの文書 15 | 14 | 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

18.1. パラメータの設定

全てのパラメータの名前は大文字と小文字を区別しません。 それぞれのパラメータは、論理値、整数、浮動小数点、文字列、またはenum(列挙型)の5つの型のいずれかの値を取ります。 論理値は、onofftruefalseyesno10、または、これらとすぐに推測できるどんな接頭文字でも記述することができます(全て大文字小文字の区別はありません)。

一部の設定では、メモリや時刻に関する値を指定します。 それぞれは暗黙的な単位を持ちます。キロバイト、ブロック(通常8キロバイト)、ミリ秒、秒、分などです。 デフォルトの単位はpg_settings.unitを参照することで調べることができます。 便宜上、別の単位を明示的に指定することができます。 メモリに関する単位では、kB (キロバイト)、MB (メガバイト)、GB(ギガバイト)が有効です。 時刻に関する単位ではms(ミリ秒)、s (秒)、min (分)、h (時間)、d (日数)が有効です。 メモリ単位の乗数は1000ではなく1024であることに注意してください。

"enum(列挙)"型のパラメータは文字列パラメータと同様の方法で指定されますが、限定された値の集合に制限されます。 有効な値はpg_settings.enumvalsから見つけることができます。 列挙型パラメータ値には大文字小文字の区別がありません。

これらのパラメータを設定する1つの方法は、postgresql.confファイルを編集することで、これは通常 data ディレクトリに格納されています。 (デフォルトのコピーはデータベースクラスタディレクトリが初期化されるときそこにインストールされます。)このファイルがどういったものかの例を示します。

# This is a comment
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'
shared_buffers = 128MB

1つの行毎に1つのパラメータが指定されます。 名前と値の間の等号はオプションです。空白(white space)は特に意味を持たず、何もない行は無視されます。何処にあってもハッシュ記号(#)はその行の後の表記が注釈であることを意味します。単純でない識別子、または数値でないパラメータ値は単一引用符で括られなければなりません。パラメータ値の中に単一引用符を埋め込む場合、二重引用符(推奨)もしくは逆引用符で括ります。

パラメータ設定の他、postgresql.confにはinclude 指示子があります。 この指示子は、設定ファイルの当該位置に指定したファイルが挿入されているかのように、そのファイルを読み込み処理することを指定します。 include指示子は以下のような単純なものです。

include 'filename'

ファイル名が絶対パスでなければ、参照元の設定ファイルがあるディレクトリからの相対パスとみなされます。 includeは入れ子にすることができます。

設定ファイルはメインサーバプロセスが(pg_ctl reloadにより、一番簡単に送られる)SIGHUP信号を受け取る時は常に再読み込みされます。 メインサーバプロセスは同時にこの信号を、現存のセッションが同様に新しい値を入手できるように、全ての現在実行しているサーバプロセスに伝播します。 他の手段として、直接単一のサーバプロセスを送出することも可能です。いくつかのパラメータはサーバの起動時のみ設定されます。設定ファイル中のそれらのエントリのいかなる変更も、サーバが再起動されるまで無視されます。

これら設定パラメータを設定する第二の方法は、以下のようにpostgresコマンドに対してコマンドラインオプションとして与えます。

postgres -c log_connections=yes -c log_destination='syslog'

コマンドラインオプションはpostgresql.confにある、どんな矛盾した設定をも上書きします。 これが意味することは、postgresql.confを編集するだけでは、値をすぐに変更できず、従ってコマンドラインによる方法は便利とは言っても、後に柔軟性に犠牲を払う羽目に陥ることを覚えておいてください。

場合によっては、1つの特定セッションのみにコマンドラインオプションを与えることが便利です。 環境変数 PGOPTIONSはこの目的のためにクライアント側で使用できます。

env PGOPTIONS='-c geqo=off' psql

(これは、単にpsqlだけではなく、全てのlibpqに基づいたクライアントアプリケーションに対して有効です。) これは、サーバが起動された時に修正されたパラメータ、または、postgresql.confで指定されなければならないパラメータに対しては効果がないことを覚えておいてください。

更に、ユーザもしくはデータベースにパラメータ設定のひとそろいを割り当てることができます。 セッションが開始された時はいつでも、ユーザとデータベースに関連したデフォルトの設定が読み込まれます。 ALTER USERおよびALTER DATABASEコマンドは、それぞれこれらの設定を設定するために用いられます。 データベース毎の設定は、postgresコマンドライン、または設定ファイルから受け取った何によっても上書きされます。 そして順次ユーザ毎の設定が上書きします。 これらは共にセッション毎の設定で上書きされます。

個別のSQLセッションのいくつかのパラメータはSETコマンドで変更可能です。例えば:

SET ENABLE_SEQSCAN TO OFF;

SETが使える場合には、そのパラメータに対して設定された値が上書きされます。 いくつかのパラメータは SET では変更できません。 例えば、そのパラメータがPostgreSQLサーバ全体を再起動しなければ変更できない動作を制御している場合です。 さらに、いくつかのSETまたはALTERパラメータによる修正はスーパユーザ権限を必要とします。

SHOWコマンドで全てのパラメータの現在値を調査することができます。

仮想テーブルpg_settingsもセッション実行時パラメータの表示と更新を可能にします。 異なった変数型と、いつそれらが変更可能かについての詳細と説明は 項45.62 を参照してください。 pg_settingsSHOWSETと等価です。 しかし、他のテーブルとの結合や、目的とする条件を指定した検索ができるので、より使い勝手に優れています。 また、パラメータにどのような値が使用できるかについてより重要な情報が含まれています。