3.4. 実行時の設定

データベースシステムの動作に影響するパラメータの設定はたくさんあります。ここではそれらの設定方法を述べ、後のセクションで 1 つ 1 つについて説明します。

すべてのパラメータ名は大文字/小文字を区別しません。 それぞれのパラメータは、ブーリアン(論理)、整数、浮動小数点、文字列、の 4 つの型のいずれかの値を持ちます。ブーリアンの値はONOFFTRUEFALSEYESNO10(大文字/小文字の区別なし)もしくは曖昧でなければこれらの頭文字でも構いません。

これらのオプションを設定するための1つの方法としては、ファイルpostgresql.confをデータディレクトリに作成することがあります(デフォルトファイルがここにインストールされています)。そのファイルがどのようになっているかの例を以下に示します。

# This is a comment
log_connections = yes
syslog = 2
search_path = '$user, public'

オプションは1行につき1つです。名前と値の間のイコール記号はなくても構いません。空白は意味を持たず、空行は無視されます。シャープ記号("#")はどこにあってもコメントを意味します。単純な識別子や数値ではないパラメータ値は、単一引用符で囲む必要があります。

この設定ファイルはpostmasterがSIGHUPシグナルを受けるたびに再読み込みされます(これは、pg_ctl reload による方法が最も簡単です)。また、このシグナルは実行中のセッションが新しい値を取得するように、現在稼働中のすべてのバックエンドプロセスにも伝えられます。また、シグナルを単一のバックエンドのみに直接送ることもできます。

これらの設定パラメータを指定する 2 番目の方法として、下記のように postmaster にコマンドラインオプションとして渡す方法があります。

postmaster -c log_connections=yes -c syslog=2

これは1つ前の例と同じ結果が得られます。コマンドラインオプションはpostgresql.confの中の重複する設定を書き換えてしまいます。

コマンドラインオプションを1つの特定のバックエンドセッションのみに渡すことが有用な場合があります。これは下記のように、クライアント側で環境変数 PGOPTIONS を使用することによって可能となります。

env PGOPTIONS='-c geqo=off' psql

(これは、psql のみならず、libpq ベースのあらゆるクライアントアプリケーションで使用することができます。)しかし、ポート番号のような、サーバが起動するときに固定されるオプションでは使用できないので注意してください。

いくつかのオプションは個別の SQL セッションの中で SET コマンドを使って変更することができます。たとえば下記のようになります。

=> SET ENABLE_SEQSCAN TO OFF;

構文の詳細については SQL コマンドの言語リファレンスを参照してください。

さらに、ユーザまたはデータベースに対してオプションのセットを割り当てることも可能です。セッションが開始されると、関連するユーザとデータベースのデフォルト設定がロードされます。ALTER DATABASE および ALTER USER コマンドはそれぞれ、これらの設定を行うために使用されます。このようなデータベースごとの設定は、postmaster またコンフィギュレーションファイルから受け取ったものすべてを上書きし、次に、ユーザごとの設定によって上書きされます。

3.4.1. pg_settings

pg_settings 仮想テーブルによって、現在のセッションの実行時パラメータの表示と更新が可能になります。SHOW ALL によって提示される使用可能なパラメータのそれぞれについて 1 つのエントリが存在します。しかし、他のリレーションと結合したり選択基準を適用したりすることは、フォームによって可能となります。

pg_settingsUPDATE を実行することは、その指定されたパラメータで SET コマンドを実行するのと同じことです。変更は、現在のセッションで使用される値にのみ影響を与えます。後にアボートされたトランザクションで UPDATE が実行されている場合、UPDATE コマンドの影響はトランザクションがロールバックされたときに消滅します。関連するトランザクションがコミットされると、別の UPDATE または SET によって上書きされない限り、影響はセッションの終わりまで持続します。

Table 3-1. pg_settings の列

名前説明
nametext現在のセッションの実行時パラメータの名前
settingtext現在のセッションの実行時パラメータの値

3.4.2. プランナとオプティマイザの調整

CPU_INDEX_TUPLE_COST (浮動小数点)

問い合わせオプティマイザがインデックススキャンの間にそれぞれのインデックスタプルを処理するコストの概算を設定します。これは順ページ取り出しのコストとの比率で評価されます。

CPU_OPERATOR_COST (浮動小数点)

オプティマイザが WHERE 句の中のそれぞれの演算子を処理するコストの概算を設定します。これは順ページ取り出しのコストとの比率で評価されます。

CPU_TUPLE_COST (浮動小数点)

問い合わせオプティマイザが問い合わせの間にそれぞれのタプルを処理するコストを設定します。これは順ページ取り出しのコストとの比率で評価されます。

DEFAULT_STATISTICS_TARGET (整数)

ALTER TABLE SET STATISTICS によって列固有の統計対象値を設定されていなかったテーブルの列にデフォルトの統計対象値を設定します。値を大きくすると ANALYZE に必要な時間は増加しますが、プランナによる推定の質が向上する可能性があります。

EFFECTIVE_CACHE_SIZE (浮動小数点)

ディスクキャッシュの実効サイズに関するオプティマイザの推測を設定します(すなわち、PostgreSQLデータファイルに使われるカーネルのディスクキャッシュです)。これは、通常は一単位 8K バイトのディスクページを基準に評価します。

ENABLE_HASHJOIN (ブーリアン)

問い合わせプランナのハッシュ結合型の計画の使用を有効または無効にします。デフォルトは有効です。これは問い合わせプランナのデバッグで使用されます。

ENABLE_INDEXSCAN (ブーリアン)

問い合わせプランナのインデックススキャン型の計画の使用を有効または無効にします。デフォルトは有効です。これは問い合わせプランナのデバッグで使用されます。

ENABLE_MERGEJOIN (ブーリアン)

問い合わせプランナのマージ結合型の計画の使用を有効または無効にします。デフォルトは有効です。これは問い合わせプランナのデバッグで使用されます。

ENABLE_NESTLOOP (ブーリアン)

問い合わせプランナのネストループ結合計画の使用を有効または無効にします。ネストループ結合を完全に抑えることは不可能ですが、他の方法がある場合、この変数を無効にすることによりプランナがネストループ結合を使わないようにします。デフォルトは有効です。これは問い合わせプランナのデバッグで使用されます。

ENABLE_SEQSCAN (ブーリアン)

問い合わせプランナが順スキャン型の計画の使用を有効または無効にします。順スキャンを完全に抑えることは不可能ですが、他の方法がある場合、この変数を無効にすることによりプランナが順スキャンを使わないようにします。デフォルトは有効です。これは問い合わせプランナのデバッグで使用されます。

ENABLE_SORT (ブーリアン)

問い合わせプランナが明示的なソート処理の使用を有効または無効にします。明示的なソートを完全に抑えることは不可能ですが、他のメソッドがある場合、この変数を無効にすることによりプランナが明示的なソートを使わないようにします。デフォルトは有効です。これは問い合わせプランナのデバッグで使用されます。

ENABLE_TIDSCAN (ブーリアン)

問い合わせプランナがTID スキャン計画の型の使用を有効または無効にします。デフォルトは有効です。これは問い合わせプランナのデバッグで使用されます。

GEQO (ブーリアン)

問い合わせプランナが、しらみつぶしの検索を行うことなく問い合わせ計画を作成するアルゴリズムである遺伝的問い合わせ最適化の使用を有効または無効にします。デフォルトは有効です。他のGEQO_ 設定も参照して下さい。

GEQO_EFFORT (整数)
GEQO_GENERATIONS (整数)
GEQO_POOL_SIZE (整数)
GEQO_RANDOM_SEED (整数)
GEQO_SELECTION_BIAS (浮動小数点)

遺伝的問い合わせ最適化のアルゴリズムにはさまざまなパラメータがあります。プールのサイズは1つの個体群の個体の数です。有効な値は128から1,024までです。 もし0に設定されると(デフォルトです)、QSが問い合わせの中のFROM句の数である2^(QS+1)のプールサイズが選ばれます。これは世代のデフォルトを計算するために行われます。固定値は1から80の間で、デフォルトは40です。世代はアルゴリズム中の反復の数を指定します。その数は正の整数でなくてはいけません。もし0が指定された場合、Effort * Log2(PoolSize)が使われます。そのアルゴリズムの実行時間は、大雑把にいえばプールサイズと世代の合計に比例します。この選択の偏りは個体群の中の選択圧力です。値は1.5から2.00の間で、2.00がデフォルトです。アルゴリズムから再現可能な結果を得るために乱数シードを設定することができます。もし-1に設定されるとアルゴリズムは非決定論的に動作します。

GEQO_THRESHOLD (整数)

少なくともこれだけの数のFROM句の項目を含む問い合わせを計画する場合には、遺伝的問い合わせ最適化を使用します(JOIN構造は1つのFROM句として数えられます)。デフォルトは11です。 もっと単純な問い合わせでは、決定論的でしらみつぶし検索プランナを使うのが最適でしょう。このパラメータはまた、オブティマイザが副問い合わせのFROM 句を上位問い合わせにマージさせる時の困難性の制御も行います。

RANDOM_PAGE_COST (浮動小数点)

問い合わせオプティマイザの順不同に取りだされたディスクページのコストの概算を設定します。これは順ページ取り出しコストの倍数で評価されます。

Note: 残念なことに、上記で説明された "COST" 変数のファミリーの理想的な値を決定するきっちりと決められた方法はありません。実験してみてよい方法があったら教えてください。

3.4.3. ログとデバッグ

SERVER_MIN_MESSAGES (文字列)

これは、サーバログにどの程度詳しいメッセージが書き込まれるかを制御します。有効な値は、DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORLOGFATALPANIC です。後方の値にするほど、ログに送られる情報が少なくなります。デフォルトは NOTICE です。 ここでは、LOG の優先順位が CLIENT_MIN_MESSAGES の場合と異なります。

以下に、さまざまなメッセージ型について説明します。

DEBUG[1-5]

開発者のための情報を提供します。

INFO

ユーザによって暗黙的に要求された情報を提供します (VACUUM VERBOSE などの際)。

NOTICE

ユーザにとって便利な情報を提供します (長い識別子の切り捨てや、主キーの一部としてのインデックスの作成など)。

WARNING

ユーザに警告を行います (トランザクション外部での COMMIT など)。

ERROR

トランザクションのアボートの原因となったエラーを報告します。

LOG

管理者に必要な情報を報告します (チェックポイントの状況など)。

FATAL

バックエンドのセッションが終了した原因を報告します。

PANIC

全てのバックエンドセッションが再起動した原因を報告します。

CLIENT_MIN_MESSAGES (文字列)

これは、クライアントにどの程度詳しいメッセージが書き込まれるかを制御します。有効な値は、DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOGNOTICEWARNINGERROR、です。 後方の値にするほど、クライアントに送られる情報が少なくなります。デフォルトは NOTICE です。 ここでは、LOG の優先順位が SERVER_MIN_MESSAGES の場合と異なります。さまざまな値について説明している節も参照してください。

DEBUG_ASSERTIONS (ブーリアン)

さまざまな表明(assert)のチェックを有効にします。これはデバッグ用の道具です。もし問題やクラッシュがある場合は有効にすると、プログラムの間違いが明らかになるかもしれません。 このオプションを使うためには、PostgreSQL を構築するときにマクロ USE_ASSERT_CHECKING が定義されていなければなりません (configure コマンドの --enable-cassert オプションで行います)。表明を有効にして PostgreSQL を構築すると、DEBUG_ASSERTIONS はデフォルトで有効になります。

DEBUG_PRINT_PARSE (ブーリアン)
DEBUG_PRINT_REWRITTEN (ブーリアン)
DEBUG_PRINT_PLAN (ブーリアン)
DEBUG_PRETTY_PRINT (ブーリアン)

これらのフラグはサーバログに送られる各種デバッグ出力を有効にします。 実行された問い合わせそれぞれについて、問い合わせテキスト、解析ツリー、問い合わせ書き換えの出力、実行計画が表示されます。DEBUG_PRETTY_PRINT はこれらの表示をより読みやすくするためにインデントしますが、出力形式がより長くなります。

EXPLAIN_PRETTY_PRINT (ブーリアン)

詳細な問い合わせツリーダンプの表示に EXPLAIN VERBOSE がインデントフォーマットと非インデントフォーマットのどちらを使用するかを決定します。

HOSTNAME_LOOKUP (ブーリアン)

デフォルトでは、接続ログはホストのIPアドレスのみを表示します。もしホスト名を表示させたい場合はこれを有効にしますが、ホスト名解決の設定によっては無視できないほどの性能の低下をもたらすこともあります。このオプションはサーバの起動時にのみ設定できます。

LOG_CONNECTIONS (ブーリアン)

成功した接続が詳述された行をサーバログに出力します。デフォルトでは無効ですが、これはとても役に立ちます。このオプションはサーバ起動時、または、postgresql.conf 設定ファイルでのみ設定できます。

LOG_DURATION (ブーリアン)

全ての完了した文がログに記録されるための所要時間を確保します。 このオプションを使用するには、プロセス ID を使用して文を所要時間にリンクできるように、LOG_STATEMENT および LOG_PID を有効にしてください。

LOG_MIN_ERROR_STATEMENT (文字列)

どのメッセージレベルのメッセージを発生させた SQL 文を、サーバログに記録するかを制御します。 設定したレベル以上のメッセージを発生させた全ての文がログに記録されます。 デフォルトは PANIC です (したがって、このオプションは無効になっています)。有効な値は、DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORFATALPANIC です。 例えば、これを ERROR に設定すると、エラー、致命的なエラー、またはパニックを引き起こした全ての SQL 文がログに記録されます。

エラー文とエラーメッセージをより簡単に照合できるように、LOG_PID も有効にしておくことをお勧めします。

LOG_PID (ブーリアン)

ログファイル内のそれぞれのサーバメッセージの冒頭にバックエンドプロセスのプロセス ID を付けます。これは、どのメッセージがどの接続に属しているかをはっきりするのに役立ちます。デフォルトでは無効です。このパラメータは、syslog によってログに記録されたメッセージには影響を与えません。このようなメッセージには常にプロセス ID が含まれています。

LOG_STATEMENT (ブーリアン)

全ての SQL 文がログに記録されるようにします。

LOG_TIMESTAMP (ブーリアン)

それぞれのサーバログメッセージの先頭にタイムスタンプを付けます。デフォルトでは無効です。

SHOW_STATEMENT_STATS (ブーリアン)
SHOW_PARSER_STATS (ブーリアン)
SHOW_PLANNER_STATS (ブーリアン)
SHOW_EXECUTOR_STATS (ブーリアン)

それぞれの問い合わせに対し、注目すべきモジュールの性能統計値をサーバログに書き出します。これは粗雑なプロファイルの道具です。

SHOW_SOURCE_PORT (ブーリアン)

接続ログメッセージの中で接続するホストのポート番号を表示します。どのユーザーが接続を開始したかを調べるためにポート番号を使うことができます。それ以外では特に役に立たないので、デフォルトでは無効になっています。このオプションはサーバの起動時にのみ設定できます。

STATS_COMMAND_STRING (ブーリアン)
STATS_BLOCK_LEVEL (ブーリアン)
STATS_ROW_LEVEL (ブーリアン)

これらのフラグは、バックエンドがどの情報を統計収集プロセスに送信するのかを決定します。現在のコマンド、ブロックレベルの活動統計情報、または、低レベルな活動統計情報です。デフォルトでは全て無効です。統計情報収集を有効にすることは問い合わせ実行速度に小量のコストが発生し、また、デバッグや性能調整にはあまり意味がありません。

STATS_RESET_ON_SERVER_START (ブーリアン)

有効にした場合、収集された統計情報はサーバが再起動する度に 0 にされます。無効の場合、統計情報はサーバの再起動をまたいで累積されます。デフォルトは有効です。このオプションはサーバの起動時にのみ設定できます。

STATS_START_COLLECTOR (ブーリアン)

サーバが統計情報収集サブプロセスを起動するかどうかを制御します。デフォルトでは有効ですが、収集された統計情報に興味がない場合は無効にすることができます。このオプションはサーバの起動時にのみ設定できます。

SYSLOG (整数)

PostgreSQLは、ログのためにsyslogを使うことができます。もしこのオプションが1に設定されていると、メッセージは syslog と標準出力の両方に表示されます。 2 の設定は syslog のみに表示されます(標準エラー出力、標準出力に表示されるメッセージもいくつかあります)。デフォルトでは 0 ですが、これは syslog が無効ということです。このオプションはサーバの起動時に設定されなくてはいけません。

SYSLOG_FACILITY (文字列)

このオプションは syslog が有効なときに syslog "ファシリティ" を使うようにします。 LOCAL0LOCAL1LOCAL2LOCAL3LOCAL4LOCAL5LOCAL6LOCAL7 の中から選ぶことができ、デフォルトは LOCAL0 です。使用しているシステムの syslog ドキュメントも参照してください。

SYSLOG_IDENT (文字列)

このオプションは、syslog のログが有効な場合に syslog ログメッセージの中の PostgreSQL メッセージを識別するために使われるプログラム名を指定します。デフォルトは postgres です。

TRACE_NOTIFY (ブーリアン)

コマンド LISTENNOTIFY のための大量なデバッグ出力を生成します。

3.4.4. 全般的な操作

AUTOCOMMIT (ブーリアン)

真に設定されると、PostgreSQL は、明示的なトランザクションブロックの内側にない成功した各コマンドの後に COMMIT を自動的に実行します (一致する COMMIT のない BEGIN が与えられていない場合)。偽に設定されている場合、PostgreSQL は明示の COMMIT コマンドを受け取った場合にのみコミットします。このモードは、まだトランザクションブロックの内側にないコマンドを受け取る際は暗黙的に BEGIN を実行するのと同じことです。 PostgreSQL の歴史的な動作との互換性のため、デフォルトは真となっています。 しかし、SQL の仕様との最大限の互換性を得るためには、偽に設定してください。

Note: autocommit が偽に設定されていても、SETSHOWRESET は新しいトランザクションブロックを開始しません。これらは、独自のトランザクションで実行されます。 別のコマンドが実行されるとトランザクションブロックが開始され、全ての SETSHOWRESET コマンドはトランザクションの一部とみなされます。つまり、これらはトランザクションの完了状況に応じてコミットされたりロールバックされたりします。トランザクションブロックの開始時に SETSHOWRESET コマンドを実行するには、最初に BEGIN を使用します。

Note: PostgreSQL 7.3 において、autocommit を偽に設定することは完全にはサポートされていません。これは新しい機能で、クライアントライブラリやアプリケーションによってはまだ対応していません。これをインストレーションのデフォルトの設定にする場合は、事前に注意深くテストしてください。

AUSTRALIAN_TIMEZONES (ブーリアン)

真(true)ならば、CSTESTSAT は北米中央、北米西タイムゾーンと土曜日ではなく、オーストラリアタイムゾーンとして解釈されます。デフォルトは偽 (false) です。

AUTHENTICATION_TIMEOUT (整数)

クライアント認証の完了までの(秒単位の)最大時間です。この時間内にクライアントがその認証手順を完了できなかった場合、サーバは接続を止めます。これはクライアントがずっと接続状態になることを防止します。このオプションはサーバ起動時かファイルpostgresql.confでのみ設定できます。

CLIENT_ENCODING (文字列)

クライアント側の符号化方式をマルチバイト文字セットに設定します。デフォルトでは、データベース符号化方式を使用します。

DATESTYLE (文字列)

日付の表示形式や、日付の曖昧な入力を解釈する規則を設定します。デフォルトは ISO, US です。

DB_USER_NAMESPACE (ブーリアン)

これは、データベースごとのユーザ名を可能にします。デフォルトでは無効です。

有効にされた場合、ユーザを username@dbname という形式で作成します。 username (ユーザ名) が接続クライアントによって渡されると、@ とデータベース名がユーザ名に追加され、データベース固有のユーザ名がサーバによって検索されます。 SQL 環境内において、ユーザ名に @ を含むユーザを作成した場合、そのユーザ名を引用符で囲む必要があることに注意してください。

このオプションを有効にした場合でも、通常の全体的に共通 (グローバル) なユーザを作成することもできます。ただ単に、クライアントでユーザ名を指定する際に @ を追加してください。 サーバによってユーザ名が検索される前に、@ は除去されます。

Note: この機能は、完全な解決策が見つかるまでの一時的な措置です。 解決策が見つかった際には、このオプションは削除されます。

DEADLOCK_TIMEOUT (整数)

これは、デッドロック状態があるかどうかを調べる前にロックを待つ時間をミリ秒で計算したものです。デッドロックのチェックは比較的遅いので、サーバはロックを待つたびにこれを実行するわけではありません。(楽天的ですが)デッドロックは実用レベルのアプリケーションでは頻繁に発生しないと仮定し、デッドロックのチェックを開始する前にしばらくはロック待ちをします。この値を増やすことにより必要のないデッドロックのチェックで無駄にされる時間は減りますが、本当にデッドロックがあった場合の報告が遅れます。デフォルトは1000(つまり1秒)で、おそらく実用の際にはこれ以上は必要でしょう。負荷の大きいサーバではもっと必要かもしれません。理想としてはこの設定は通常のトランザクションにかかる時間を越えているべきです。 そうすればロック待ちトランザクションがデッドロックのチェックをする前にロックが解除される可能性が改善されます。このオプションはサーバの起動時にのみ設定できます。

DEFAULT_TRANSACTION_ISOLATION (文字列)

SQL トランザクションはそれぞれ、"read committed" または、"serializable"のどちらかの隔離レベルを持ちます。このパラメータは各新規トランザクションのデフォルトの隔離レベルを制御します。デフォルトは "read committed" です。

詳しくは、PostgreSQL 7.3 ユーザガイド および SET TRANSACTION コマンドの説明を参照して下さい。

DYNAMIC_LIBRARY_PATH (文字列)

オープンする必要がある動的ロード可能なモジュールの名前がディレクトリ要素がなく(つまり、名前にスラッシュが含まれずに)指定された場合、システムは指定されたファイルをこのパスから検索します。(使用される名前は CREATE FUNCTION または LOAD で指定される名前です。

dynamic_library_path の値は、絶対パスのディレクトリ名をコロンを区切った一覧です。このディレクトリ名が特別な $libdir という値から始まる場合、コンパイルされた PostgreSQL パッケージのライブラリディレクトリは置換されます。ここには、PostgreSQL 配布物により提供されるモジュールがインストールされます。(このディレクトリ名を表示するには、pg_config --pkglibdir を使用して下さい)。値の例を以下に示 します。

dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'

このパラメータのデフォルト値は '$libdir' です。この値が空に設定された場合、自動的なパス検索は無効になります。

このパラメータはスーパユーザによって実行時に変更することができますが、この方法での設定は、そのクライアント接続が終るまでしか有効になりません。ですので、この方法は開発目的でのみ使用すべきです。 推奨方法はこのパラメータをpostgresql.conf 設定ファイル内で設定することです。

KRB_SERVER_KEYFILE (文字列)

Kerberosのサーバキーファイルの場所を設定します。詳細は Section 6.2.3 を参照してください。

FSYNC (ブーリアン)

このオプションを有効にすると、PostgreSQL バックエンドがいくつかの場所で fsync() システムコールを使い、更新が物理的にディスクに書き込まれたことを確実にします。これにより、オペレーティングシステムやハードウェアがクラッシュした後でも、データベースインストレーションが整合性のある状態まで復旧できるようになります。(このことは、データベースサーバ自体のクラッシュの場合にはあてはまりません。)

しかし、この操作では、トランザクションのコミット時にオペレーティングシステムがログ先行書き込みを行うのを待つ必要があるので、PostgreSQL の動作が遅くなります。fsync なしだと、オペレーティングシステムはバッファリング、ソート、そして遅延書き込みにより、最高の状態で実行することができ、性能が大きく向上します。しかし、もしシステムがクラッシュすると、コミットされたトランザクションの最後のいくつかは一部または全部なくなる可能性もあります。最悪の場合、データが復旧できなくなることもあります。

上記の理由で、常に無効にする管理者もいれば、問題が起こったときに確実に再実行できるという前堤で大容量のデータをロードするときだけ無効にする管理者もいます。また、安全を重視するために有効のままにする管理者もいます。 もし使っているオペレーティングシステム、ハードウェア、そして付属設備(UPSならもっといいのですが)を信頼するならば、fsync を無効にしたほうがよいかもしれません。

PostgreSQL バージョン 7.1 以降では、fsync を実行した場合の性能の低下はとても小さくなりました。もし性能の低下のために fsync を控えていた場合は、もう一度確認したほうがよいでしょう。

このオプションはサーバ起動時かファイルpostgresql.confでのみ設定できます。

LC_MESSAGES (文字列)

メッセージが表示される言語を設定します。使用可能な値はシステムに依存します。詳細については Section 7.1 を参照して下さい。この変数が空に設定された場合 (これがデフォルトです)、値はシステムに依存する方法でサーバの実行環境から継承されます。

システムによっては、このロケールのカテゴリが存在しません。この変数を設定することはできますが、実効性はありません。また、指定の言語に翻訳されたメッセージが存在しないこともあります。その場合は、引き続き英語のメッセージが表示されます。

LC_MONETARY (文字列)

通貨形式で使用するロケールを設定します。たとえば、関数の to_char() ファミリーを使用します。使用可能な値はシステムに依存します。詳細については Section 7.1 を参照して下さい。この変数が空に設定された場合 (これがデフォルトです)、値はシステムに依存する方法でサーバの実行環境から継承されます。

LC_NUMERIC (文字列)

数字の形式で使用するロケールを設定します。たとえば、関数の to_char() ファミリーを使用します。使用可能な値はシステムに依存します。詳細については Section 7.1 を参照して下さい。この変数が空に設定された場合 (これがデフォルトです)、値はシステムに依存する方法でサーバの実行環境から継承されます。

LC_TIME (文字列)

日付と時間の形式で使用するロケールを設定します。(現在この設定に意味はありませんが、将来的には意味をもつ可能性があります。)使用可能な値はシステムに依存します。詳細については Section 7.1 を参照して下さい。この変数が空に設定された場合 (これがデフォルトです)、値はシステムに依存する方法でサーバの実行環境から継承されます。

MAX_CONNECTIONS (整数)

データベースサーバへの同時接続の最大数を決定します。デフォルトでは(サーバをコンパイルするときに変更していない限り)32です。このパラメータはサーバ起動時にのみ設定することができます。

MAX_EXPR_DEPTH (整数)

パーサが受け入れる式のネストの深さの最大を設定します。 デフォルト値は通常の問い合わせに対して十分な大きさですが、必要に応じてより大きく設定することができます。 (ただし、あまり大きく設定した場合には、スタックオーバーフローによるバックエンドクラッシュの危険性があります。)

MAX_FILES_PER_PROCESS (整数)

各サーバサブプロセスで同時にオープンできるファイルの最大数を設定します。デフォルトは 1000 です。 コード内で実際に使用されるこの制限は、この設定よりも少なく、sysconf(_SC_OPEN_MAX) の結果です。そのため、sysconf が適切な制限を返すシステムでは、この設定を気にする必要はありません。しかし、システムによっては(特にほとんどのBSDシステムでは)、sysconf はシステムが実際に多くのプロセスが全てその数のファイルを開こうとした時にサポートできる値よりもかなり大きな値を返します。"Too many open files" という失敗が発生した場合は、この設定を減らして下さい。このオプションはサーバ起動時またはpostgresql.conf設定ファイルでのみ設定することができます。 設定ファイルでの変更は、その後に起動したサーバサブプロセスにのみ影響を与えます。

MAX_FSM_RELATIONS (整数)

空き領域を共有された空き領域マップで管理する、リレーション(テーブル)の最大数を設定します。デフォルトは100です。 このオプションはサーバ起動時のみで設定することができます。

MAX_FSM_PAGES (整数)

空き領域を共有された空き領域マップで管理するディスクページの最大数を設定します。デフォルトは10000です。 このオプションはサーバ起動時のみで設定することができます。

MAX_LOCKS_PER_TRANSACTION (整数)

共有ロックテーブルの大きさは、最大max_locks_per_transaction * max_connections個の個別のオブジェクトが、ある時点でロックされるという仮定で決定されます。デフォルトの 64 は歴史的に十分な値であると証明されたものですが、多くの異なるテーブルを 1 つのトランザクションで使用するクライアントがある場合、この値を上げる必要があるかもしれません。このオプションはサーバの起動時にのみ設定できます。

PASSWORD_ENCRYPTION (ブーリアン)

ENCRYPTED または UNENCRYPTED の指定なしで CREATE USER または ALTER USER でパスワードが指定された場合、このフラグによりそのパスワードを暗号化するかどうかを決定します。デフォルトは有効です (パスワードを暗号化します)。

PORT (整数)

サーバが監視するTCPポートです。 デフォルトでは5432です。このオプションはサーバの起動時にのみ設定できます。

SEARCH_PATH (文字列)

この変数は、オブジェクト (テーブル、データ型、関数など) がスキーマコンポーネントを含まない単純な名前で参照されている場合に、スキーマを検索する順番を指定します。 異なるスキーマに同じ名前のオブジェクトがある場合、検索パスで最初に見つかったものが使用されます。 検索パス内のどのスキーマにも存在しないオブジェクトを参照するには、修飾名 (ドット付き) でそのオブジェクトが含まれるスキーマを指定する必要があります。

search_path の値は、スキーマの名前をコンマで区切った一覧でなければなりません。 一覧内の項目の 1 つが特別な値である $user の場合、SESSION_USER と同じ名前をもつスキーマがあれば、そのスキーマが置換されます。(このような名前空間がない場合は $user は無視されます。)

システムカタログのスキーマである pg_catalog は、パスでの指定の有無に関わらず、常に検索されます。パスで指定されている場合は、指定された順序で検索されます。pg_catalog がパスに含まれていない場合、パスに含まれる項目を検索する前に検索が行われます。 一時テーブルのスキーマである pg_temp_nnn についても、パス内の項目が検索される前に暗黙的に検索されることに注意してください。

対象となる特定のスキーマを指定せずにオブジェクトが作成された場合、それらのオブジェクトは検索パスで最初に指定されているスキーマに配置されます。検索パスが空の場合、エラーが報告されます。

このパラメータのデフォルト値は '$user, public' です (public という名前のスキーマが存在しない場合、2 つ目の部分は無視されます)。 これにより、データベースの共有 (どのユーザも非公開のスキーマを持たず、全員が public を共有)、ユーザごとの非公開のスキーマ、およびこれらの組み合わせがサポートされます。デフォルトの検索パスの設定を全体的またはユーザごとに変更することで、その他の効果を得ることもできます。

current_schemas() 関数によって、検索パスの現在の有効な値を調べることができます。これは、search_path の値を調べるのとは異なります。current_schemas() は、search_path に現れる要求がどのように解決されたかを表すからです。

スキーマの処理に関する詳細については、PostgreSQL 7.3 ユーザガイド を参照して下さい。

STATEMENT_TIMEOUT (整数)

指定されたミリ秒の時間を超過する文をすべてアボートします。ゼロにすると、タイマーは無効になります。

SHARED_BUFFERS (整数)

データベースサーバが使う共有メモリバッファの数を設定します。デフォルトでは64です。 それぞれのバッファは通常8,192バイトです。このオプションはサーバの起動時にのみ設定できます。

SILENT_MODE (ブーリアン)

サーバをサイレントモードで起動します。 このオプションが有効にされると、サーバは自動的にバックグラウンドで起動され、制御端末が切り離されます。したがって、標準出力にも標準エラー出力にもメッセージは書き込まれなくなります (postmaster-S オプションと同じ結果です)。エラーメッセージが見えなくなるので、syslogなどのログシステムが有効でない限りこのオプションは使わないほうがよいでしょう。

SORT_MEM (整数)

一時ディスクファイルへの切替えを行う前に、内部ソートとハッシュで使われるメモリの量を指定します。 この値は K バイト単位で指定し、そのデフォルトは 1024 K バイトです (1 MB)。複雑な問い合わせでは、いくつかのソートが並行して実行される可能性があり、その場合それぞれがデータを一時ファイルに書き出す前にこの値が指定した量のメモリを使うことが許されます。また、それぞれの動いているバックエンドが並行して 1 つ以上のソートをしている可能性があります。したがって、使用されるメモリの合計は SORT_MEM の値の何倍にもなり得ます。 ソートは、ORDER BY、マージ結合、および CREATE INDEX で使用されます。

SQL_INHERITANCE (ブーリアン)

これは継承のセマンティクス、特にサブテーブルを各種コマンドでデフォルトで考慮すべきかどうか、を制御します。これらは 7.1 以前のバージョンには含まれていませんでした。もし古いバージョンの動作をさせたい場合はこの変数を無効にできますが、長い目で見ればアプリケーションがサブテーブルを排除するためにONLYキーワードを使うようにするほうがよいでしょう。 継承に関する詳細は、SQL 言語リファレンスと PostgreSQL 7.3 ユーザガイド を参照してください。

SSL (ブーリアン)

SSL接続を可能にします。これを使う前にSection 3.7を参照してください。デフォルトでは無効です。

SUPERUSER_RESERVED_CONNECTIONS (integer)

PostgreSQL スーパーユーザによる接続用に予約される "接続スロット" の数を設定します。 最大で max_connections の数までの接続を同時にアクティブにすることができます。 アクティブな同時接続の数が max_connections から superuser_reserved_connections を引いた数以上の時ならばいつでも、スーパーユーザアカウントからの新規接続のみが受け入れられます。

デフォルト値は 2 です。 この値は、max_connections の値よりも小さくなければなりません。このパラメータはサーバ起動時にのみ設定することができます。

TCPIP_SOCKET (ブーリアン)

これが真になっていると、サーバは TCP/IP 接続を受け入れます。そうでなければローカルのUnixドメインソケットの接続のみが受け入れられます。デフォルトでは無効です。このオプションはサーバの起動時にのみ設定できます。

TIMEZONE (文字列)

タイムスタンプの表示と解釈に使用するタイムゾーンを設定します。 デフォルトは、システム環境で指定されているタイムゾーンです。

TRANSFORM_NULL_EQUALS (ブーリアン)

有効にした場合、expr = NULL (または NULL = expr) という形の式は expr IS NULL として扱われます。つまり、expr の評価が NULL 値の場合真を、さもなくば偽を返します。 expr = NULL の正しい動作は常に NULL (未知) を返すことです。そのため、このオプションはデフォルトで無効です。

しかし、Microsoft Access のフィルタ形式は NULL 値を検査するために expr = NULL を使用する問い合わせを生成しますので、そのインタフェースを使用してデータベースにアクセスする場合は、このオプションを有効にする方が良いでしょう。 expr = NULL という形の式は (正しい解釈を使用した結果) 常に NULL 値を返しますので、通常のアプリケーションでは意味がほとんどなく、滅多に使用されません。ですので、このオプションは実際は害はありません。 しかし、慣れていないユーザはしばしば NULL 値に関する式の意味に戸惑いますので、デフォルトでこのオプションは有効になっていません。

このオプションは = という文字の演算子にのみ影響することに注意して下さい。 他の比較演算子や等価演算子を呼び出す他の(INのような)式と計算する上で等価となる式には影響を与えません。従って、このオプションは間違ったプログラミングの汎用的な問題解決をおこないません。

関連する情報については、PostgreSQL 7.3 ユーザガイド を参照して下さい。

UNIX_SOCKET_DIRECTORY (文字列)

サーバがクライアントアプリケーションからの接続を監視する Unix ドメインソケットのディレクトリを指定します。デフォルトは通常/tmpですが、ビルド時に変えることができます。

UNIX_SOCKET_GROUP (文字列)

Unix ドメインソケットのグループ所有者を設定します。 (ソケットを所有するユーザは常に、サーバを起動するユーザです。)オプションUNIX_SOCKET_PERMISSIONSと一緒に使うと、このタイプのソケットの追加アクセスコントロール機構として使うことができます。デフォルトでは空文字列で、現在のユーザのデフォルトグループを使います。このオプションはサーバの起動時にのみ設定できます。

UNIX_SOCKET_PERMISSIONS (整数)

Unixドメインソケットのアクセス権限を設定します。Unixドメインソケットは通常のUnixファイルシステム権限の設定を使います。 このオプション値は chmodumask システムコールが受け付ける数値のモード指定になるはずです(通常使われる8進数のフォーマットを使うためには「0」――ゼロで始まらなくてはいけません)。

デフォルトの権限は、誰でも接続できる 0777 になっています。 適切な代わりとしては 0770 (ユーザーとグループのみです。UNIX_SOCKET_GROUP も参照してください)や 0700 (ユーザーのみ) を使うこともできます(Unix ドメインソケットには、実際には書き込み権限だけが問題であり、読み込み権限や実行権限を設定または解除する意味はありません)。

このアクセスコントロール機構は Chapter 6 で説明されたものからは独立しています。

このオプションはサーバの起動時にのみ設定できます。

VACUUM_MEM (整数)

VACUUM が改修すべきタプルの追跡を保持するために使用するメモリの最大量を指定します。この値はkバイト単位で指定し、そのデフォルトは 8192 kバイトです。より大きな値を設定することで、多くの削除されたタプルを持つ巨大なテーブルの場バキューム処理は高速になる可能性があります。

VIRTUAL_HOST (文字列)

postmasterがクライアントアプリケーションからの接続を監視するTCP/IPホスト名かアドレスを指定します。デフォルトはすべての設定されたアドレス(localhostを含む)になっています。

3.4.5. WAL

WAL調整の詳細についてはSection 12.3も参照してください。

CHECKPOINT_SEGMENTS (整数)

自動 WAL チェックポイントの間の最大距離を、ログファイルセグメントの数 (それぞれのセグメントは通常 16M バイトです) で指定します。 このオプションはサーバ起動時かファイルpostgresql.confでのみ設定できます。

CHECKPOINT_TIMEOUT (整数)

自動WALチェックポイント同士の間隔を秒で指定します。このオプションはサーバ起動時かファイルpostgresql.confでのみ設定できます。

COMMIT_DELAY (整数)

コミットレコードのWALバッファへの書き出しとそのバッファのディスクへの吐き出しの間の(ミリ秒単位の)遅延時間です。システムの負荷が高く、指定間隔内で更なるトランザクションのコミット準備が整った場合、非 0 値の遅延により、複数のトランザクションを 1 回の fsync システムコールだけでコミットすることができます。しかし、もし他にコミット準備が整ったトランザクションが存在しない場合は、この遅延は無駄になります。 そのため、バックエンドプロセスがそのコミットレコードを書き出す時に、少なくとも COMMIT_SIBLINGS 個の有効なトランザクションが存在した場合にのみ、この遅延が行われます。

COMMIT_SIBLINGS (整数)

COMMIT_DELAY 遅延の実行前に必要とされる、同時にオープンされるトランザクションの最小数です。値をより大きくすることは、この遅延期間内に少なくとも1つ、他のトランザクションのコミット準備が整ったことをより確実にします。

WAL_BUFFERS (整数)

WAL ログ用の、共有メモリ内のディスクページバッファ数です。このオプションはサーバの起動時にのみ設定できます。

WAL_DEBUG (整数)

もし 0 でなければ、WAL 関係のデバッグ表示を標準エラー出力に書き込みます。

WAL_SYNC_METHOD (文字列)

WAL更新をディスクに書き出す方法を指定します。可能な値はFSYNC(それぞれのコミットでfsync()を呼び出す)、FDATASYNC(それぞれのコミットでfdatasync()を呼び出す)、OPEN_SYNCopen() オプションO_SYNCでWALファイルを書き出す)、OPEN_DATASYNCopen()オプションO_DSYNCでWALファイルを書き出す)の4つです。これらのすべての選択がすべてのプラットフォームで使えるわけではありません。このオプションはサーバ起動時かファイルpostgresql.confでのみ設定できます。

3.4.6. 短いオプション

便宜上、多くのパラメータには1文字のオプションスイッチがあります。 これらは Table 3-2 で説明しています。

Table 3-2. 短いオプションキー

短いオプション同義
-B xshared_buffers = x
-d xserver_min_messages = DEBUGx
-Ffsync = off
-h xvirtual_host = x
-itcpip_socket = on
-k xunix_socket_directory = x
-lssl = on
-N xmax_connections = x
-p xport = x
-fi, -fh, -fm, -fn, -fs, -ft[a] enable_indexscan=off, enable_hashjoin=off, enable_mergejoin=off, enable_nestloop=off, enable_seqscan=off, enable_tidscan=off
-s[a]show_statement_stats = on
-S x[a] sort_mem = x
-tpa, -tpl, -te[a]show_parser_stats=on, show_planner_stats=on, show_executor_stats=on
Notes:
a. 歴史的な理由から、これらのオプションは postmaster オプションの -o を使用して個々のバックエンドプロセスに渡される必要があります。たとえば、

$ postmaster -o '-S 1024 -s'

のようなコマンド、もしくは上記で説明されたようにクライアント側からの PGOPTIONS を使います。