16.4. 実行時の設定

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

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

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

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

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

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

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

postmaster -c log_connections=yes -c syslog=2

コマンドラインオプションはpostgresql.confの中の重複する設定を上書きします。

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

env PGOPTIONS='-c geqo=off' psql

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

更に、ユーザやデータベースに対してオプション設定群を割り当てることも可能です。 セッションが起動するたびに、呼び出したユーザのデフォルトとデータベースのデフォルトの設定が読み込まれます。 ALTER DATABASE コマンドと ALTER USER コマンドがそれぞれ、これらの設定のために使用されます。 データベース毎の設定は、postmasterのコマンドラインや設定ファイルに由来する設定を上書きします。その次に、ユーザ毎の設定によって上書きされます。 両者ともセッション毎のオプションによって上書きされます。

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

SET ENABLE_SEQSCAN TO OFF;

SET が許される場合、その設定は他のソースのパラメータ値を上書きします。 スーパーユーザは、一般ユーザに比べ多くの値をSETで設定することができます。

SHOWコマンドにより、すべてのパラメータの現在値を確認することができます。

また、(項43.34で説明する)pg_settings仮想テーブルによって、セッションの実行時パラメータを表示、更新することができます。 これは、SHOWSETと等価ですが、他のテーブルと結合することや任意の希望選択条件を設定して選択することができ、より便利です。

16.4.1. 接続と認証

16.4.1.1. 接続設定

tcpip_socket (boolean)

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

max_connections (integer)

データベースサーバへの同時接続の最大数を決定します。 デフォルトは通常100ですが、カーネル設定がサポートしていない場合はもっと少なくなります。 (これはinitdb時に決定されます。) このパラメータはサーバ起動時にのみ設定することができます。

このパラメータを増加させることで、PostgreSQLは、使用中のオペレーティングシステムのデフォルト設定が許可する量よりも多くのSystem V共有メモリやセマフォを要求する可能性があります。 必要ならば、これらのパラメータの調整方法について項16.5.1を参照して下さい。

superuser_reserved_connections (integer)

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

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

port (integer)

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

unix_socket_directory (string)

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

unix_socket_group (string)

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

unix_socket_permissions (integer)

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

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

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

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

virtual_host (string)

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

rendezvous_name (string)

Rendezvous ブロードキャスト名を指定します。 デフォルトでは、''と指定された時と同様、コンピュータ名が使用されます。

16.4.1.2. セキュリティと認証

authentication_timeout (integer)

クライアント認証の完了までの最大時間を秒数で表したものです。 クライアントがこの最大時間までに認証プロトコルを完了できなかったとすると、サーバは接続を中断します。 これは、ハングしたクライアントによって接続が永遠に残ってしまうことを防止します。 このオプションはサーバの起動時、もしくは、postgresql.confファイル内で設定可能です。 デフォルトは60です。

ssl (boolean)

SSL接続を有効にします。 これを使用する前に項16.7を読んでください。 デフォルトは無効です。

password_encryption (boolean)

ENCRYPTEDもしくはUNENCRYPTEDの指定無しにCREATE USER もしくは ALTER USER でパスワードが指定された場合、このオプションがパスワードの暗号化を行なうかどうかを決定します。 デフォルトは有効(パスワードを暗号化する)です。

krb_server_keyfile (string)

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

db_user_namespace (boolean)

データベース毎のユーザ名を許可します。 デフォルトでは無効です。

これが有効な場合、username@dbnameとしてユーザを作成しなければなりません。 usernameが接続中のクライアントから渡された場合、@.とデータベース名がユーザ名に追加され、サーバによってそのデータベース固有のユーザ名が検索されます。 SQL環境下で@を含むユーザ名を作成する時には、ユーザ名を引用符で括る必要があることに注意してください。

このオプションを有効にしていても、通常のグローバルなユーザを作成することができます。 ユーザ名をクライアントで指定する時に、単に@を付けてください。 @は、サーバによってユーザ名が検索される前に除去されます。

注意: この機能は、完全な解決方法が見つかるまでの一時的な手法として意図されています。 見つかったら、このオプションは削除されます。

16.4.2. リソースの消費

16.4.2.1. メモリ

shared_buffers (integer)

データベースサーバで使用される共有メモリバッファの数を設定します。 デフォルトは、通常1000ですが、使用するカーネル設定がサポートしていなければ、より少なくなります。 (これはinitdb時に決まります。) BLCKSZをサーバを構築した時に変更していない限り、各バッファは8192バイトです。 この設定は少なくとも16でなければなりません。また、同時に、少なくともmax_connectionsの2倍でなければなりません。 しかし、通常はこの最小よりもかなり大きめに設定することが性能の向上のために必要です。 実運用のインストレーションでは数千程度の値を推奨します。 このオプションはサーバ起動時のみ設定可能です。

この値を増加すると、PostgreSQLは、オペレーティングシステムのデフォルト設定が許可する数よりも多くのSystem V共有メモリを要求する可能性があります。 必要ならば、このパラメータの調整方法の情報について項16.5.1を参照してください。

sort_mem (integer)

一時ディスクファイルへの切替えを行う前に、内部ソート操作とハッシュテーブルで使われるメモリの量を指定します。 この値は K バイト単位で指定し、そのデフォルトは 1024 K バイトです (1 MB)。 複雑な問い合わせでは、いくつかのソート操作やハッシュ操作が並行して実行される可能性があり、その場合それぞれがデータを一時ファイルに書き出す前にこの値が指定した量のメモリを使うことが許されます。 また、それぞれの稼働中のセッションが並行して 1 つ以上のソートをしている可能性があります。 従って、使用されるメモリの合計は sort_mem の値の何倍にもなり得ます。 ソート操作は、ORDER BY、マージ結合、および CREATE INDEX で使用されます。 ハッシュテーブルはハッシュ結合、ハッシュを基にした集約、ハッシュを基に処理するIN副問い合わせで使用されます。 データベースのリストア時にCREATE INDEX は使用されますので、巨大なリストア操作を行なう前にsort_memを増加させることで性能が向上します。

vacuum_mem (integer)

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

16.4.2.2. 空き領域マップ

max_fsm_pages (integer)

空き領域が共有空き領域マップ内で追跡される、ディスクページの最大数を設定します。 共有メモリの6バイトが各ぺージスロットで消費されます。 この設定は16 * max_fsm_relationsよりも大きくなければなりません。 デフォルトは20000です。 このオプションはサーバ起動時にのみ設定できます。

max_fsm_relations (integer)

空き領域が共有空き領域マップ内で追跡される、リレーション(テーブルとインデックス)の最大数を設定します。 共有メモリのおおよそ50バイトが各スロットで消費されます。 デフォルトは1000です。 このオプションはサーバ起動時にのみ設定できます。

16.4.2.3. カーネルリソースの使用

max_files_per_process (integer)

各サーバ子プロセスで同時にオープンできるファイルの最大数を設定します。 デフォルトは 1000 です。 カーネルが安全のためにプロセス当たりの制限を強制している場合は、この設定を気にする必要はありません。 しかし、プラットフォームによっては(特にほとんどのBSDシステムでは)、非常に多くのプロセスすべてが多くのファイルを開こうとした時に、カーネルは個々のプロセスがシステムが実際にサポートできるファイル数より多くを開くことを許しています。 もし"Too many open files"というエラーが発生したら、この設定を減少させてください。 このオプションはサーバの起動時にのみ設定できます。

preload_libraries (string)

この変数は、サーバ起動時点であらかじめ読み込む1つ以上の共有ライブラリを指定します。 各ライブラリについて、オプションとしてパラメータのない初期化関数を呼び出すことができます。 そのように指定するには、コロンとその初期化関数名をライブラリ名の後に付けてください。 例えば'$libdir/mylib:mylib_init'は、mylibをあらかじめ読み込み、mylib_initを実行します。 複数のライブラリを読み込む場合は、コンマでその名前を区切ってください。

mylib もしくは mylib_initが存在しない場合、サーバの起動に失敗します。

PostgreSQL 手続き言語ライブラリはこの方法であらかじめ読み込まれます。 通常は'$libdir/plXXX:plXXX_init'という構文を使用し、ここで、XXXpgsqlperltclpythonです。

共有ライブラリを事前に読み込むこと(および、適切ならば初期化すること)で、最初にライブラリを使用する時のライブラリの起動時間を省くことができます。 しかし、新しいサーバプロセスがライブラリを全く使用しない場合でも、そのプロセスの起動に要する時間は増加します。

16.4.3. 先行書き込みログ

WALの調整についての詳細は 項25.3 を参照してください。

16.4.3.1. 設定

fsync (boolean)

このオプションが有効な場合、PostgreSQL サーバはfsync()システムコールを様々な場所で使用し、確実に更新内容を物理的にディスクに書き込みます。 これにより、オペレーティングシステムやハードウェアクラッシュの後、確実にデータベースクラスタを一貫した状態に復旧させることができます。 (これはデータベースサーバ自体のクラッシュとは関係しません。)

しかし、fsync()の使用は性能を悪化させます。 トランザクションのコミット時、PostgreSQLはオペレーティングシステムが先行書き込みログをディスクに書き出すまで待機しなければなりません。 fsync()が無効ならば、オペレーティングシステムは最大限バッファに保持し、順序変更や、書き込みを遅延させることができます。 これにより、かなり性能が向上することになります。 しかし、システムがクラッシュした場合、最後の数個のコミットしたトランザクションは、一部あるいは完全に消えてしまう可能性があります。 最悪の場合、復旧できないデータの破損が発生します。

この危険性のため、fsyncについて共通的な正しい設定はありません。 常にfsyncを無効にする管理者もいますし、失敗したとしても再実行時点が明確な、大量のロードの時のみ無効にする管理者もいます。 常にfsyncを有効にする管理者もいます。 信頼性を最大にするために、デフォルトはfsync は有効です。 オペレーティングシステム、ハードウェア、付属設備(バッテリバックアップなど)が信頼できる場合、fsyncを無効にしても構いません。

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

wal_sync_method (string)

強制的にWALをディスクに更新させるために使用される方法です。 とり得る値は fsync (コミットの度にfsync()を呼び出します。)、 fdatasync (コミットの度に fdatasync() を呼び出します。)、 open_sync (O_SYNCオプション付きのopen() でWALファイルを書き出します。)、 open_datasync (O_DSYNCオプション付きのopen() でWALファイルを書き出します。)です。 これらすべてがすべてのプラットフォームで利用できるわけではありません。 このオプションはサーバ起動時、もしくは、postgresql.confファイルでのみ設定できます。

wal_buffers (integer)

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

16.4.3.2. チェックポイント

checkpoint_segments (integer)

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

checkpoint_timeout (integer)

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

checkpoint_warning (integer)

チェックポイントセグメントファイルが溢れることが原因で起きるチェックポイントが、ここで指定した秒数よりも頻繁に発生する場合、サーバログにメッセージを書き出します。 デフォルトは30秒です。 ゼロはこの警告を無効にします。

commit_delay (integer)

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

commit_siblings (integer)

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

16.4.4. 問い合わせ計画

16.4.4.1. プランナ手法の設定

注意: これらの設定パラメータは問い合わせオプティマイザが選択する問い合わせ計画に影響する粗野な手法を提供します。 特定の問い合わせでオプティマイザが選択するデフォルトの計画が最適ではない場合、一時的な解放は これらの設定パラメータの1つを使用して強制的にオプティマイザがより良い計画を選択することで見つけられる場合があります。 オプティマイザが選択する計画の質を改良する他の方法として、プランナコスト定数 の設定を行なうこと、より頻繁にANALYZEを行なうこと、ALTER TABLE SET STATISTICSを使用して特定列に関して収集する統計情報の量を増加させることがあります。

enable_hashagg (boolean)

問い合わせプランナがハッシュされた集約計画型を選択することを有効、あるいは、無効にします。 デフォルトは有効です。 これは、問い合わせプランナのデバッグのために使用されます。

enable_hashjoin (boolean)

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

enable_indexscan (boolean)

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

enable_mergejoin (boolean)

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

enable_nestloop (boolean)

問い合わせプランナが入れ子状ループ結合計画型を選択することを有効、あるいは、無効にします。 完全に入れ子状ループ結合を抑制することはできません。 しかし、この変数を無効にすることで、もし他の方法が利用できるのであれば、プランナはその使用を行なわないようになります。 デフォルトは有効です。 これは、問い合わせプランナのデバッグのために使用されます。

enable_seqscan (boolean)

問い合わせプランナが順スキャン計画型を選択することを有効、あるいは、無効にします。 完全に順スキャンを抑制することはできません。 しかし、この変数を無効にすることで、もし他の方法が利用できるのであれば、プランナはその使用を行なわないようになります。 デフォルトは有効です。 これは、問い合わせプランナのデバッグのために使用されます。

enable_sort (boolean)

問い合わせプランナが明示的なソート段階を選択することを有効、あるいは、無効にします。 完全に明示的なソートを抑制することはできません。 しかし、この変数を無効にすることで、もし他の方法が利用できるのであれば、プランナはその使用を行なわないようになります。 デフォルトは有効です。 これは、問い合わせプランナのデバッグのために使用されます。

enable_tidscan (boolean)

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

16.4.4.2. プランナコスト定数

注意: 残念ながら、後述の"コスト"変数系列の理想的な値を決定する既知の方法はありません。 実験と発見の共有を激励されています。

effective_cache_size (floating point)

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

random_page_cost (floating point)

問い合わせプランナの順不同に取りだされたディスクページのコストの概算を設定します。 これは順ページ取り出しコストの倍数で評価されます。 より高い値を設定すると、順スキャンがより使用されるようになります。 より低い値を設定すると、インデックススキャンがより使用されるようになります。 デフォルトは4です。

cpu_tuple_cost (floating point)

問い合わせプランナが問い合わせの間にそれぞれの行を処理するコストを設定します。 これは順ページ取り出しのコストとの比率で評価されます。 デフォルトは0.01です。

cpu_index_tuple_cost (floating point)

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

cpu_operator_cost (floating point)

プランナが WHERE 句の中のそれぞれの演算子を処理するコストの概算を設定します。 これは順ページ取り出しのコストとの比率で評価されます。 デフォルトは0.0025です。

16.4.4.3. 遺伝的問い合わせオプティマイザ

geqo (boolean)

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

geqo_threshold (integer)

少なくともこれだけの数のFROM句の項目を含む問い合わせを計画する場合には、遺伝的問い合わせ最適化を使用します (外部JOIN構文は1つのFROM句として数えられます)。 デフォルトは11です。 もっと単純な問い合わせでは、決定論的でしらみつぶし検索プランナを使うのが最適でしょう。 しかし、多くのテーブルを持つ問い合わせでは、決定論的なプランナは非常に時間がかかります。

geqo_effort (integer)
geqo_generations (integer)
geqo_pool_size (integer)
geqo_selection_bias (floating point)

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

16.4.4.4. 他のプランナオプション

default_statistics_target (integer)

ALTER TABLE SET STATISTICS 経由で列指定の対象を持たないテーブル列についてのデフォルトの統計情報対象を設定します。 値をより大きくすると、ANALYZE の実行に要する時間が増加しますが、プランナの推定の質が向上する可能性があります。 デフォルトは10です。

from_collapse_limit (integer)

最終的なFROMリストがこの値以上多くない場合、プランナは副問い合わせを上位問い合わせにマージします。 値を小さくすると、計画作成時間は減少しますが、劣った問い合わせ計画を生成する可能性があります。 デフォルトは8です。 通常、これをgeqo_thresholdよりも小さくしておく方が良いでしょう。

join_collapse_limit (integer)

最終的にリストがこの値以下になる時、プランナは、明示的な内部JOIN構文をFROM項目のリストに直します。 通常これはfrom_collapse_limitと同じに設定されます。 1に設定することで、内部JOINの修正は防止され、明示的なJOIN構文が、結合順の制御に使用されるようになります。 中間の値が、計画作成時間と計画の質とのトレードオフの際に有用です。

16.4.5. エラー報告とロギング

16.4.5.1. Syslog

syslog (integer)

PostgreSQLsyslogを使用してログをとることができます。 このオプションが1に設定された場合、メッセージはsyslogと標準出力の両方に流れます。 2に設定すると、出力はsyslogのみに流れます。 (メッセージの中には、標準出力と標準エラーにも流れるものもあります。) デフォルトは0で、syslog は無効です。 このオプションはサーバ起動時のみ設定可能です。

syslog_facility (string)

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

syslog_ident (string)

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

16.4.5.2. いつログをとるか

client_min_messages (string)

どのメッセージレベルをクライアントに送信するかを制御します。 有効な値はDEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOGNOTICEWARNINGERRORです。 各レベルには、そのレベル以下のすべてが含まれます。 レベルを低くするほど、送信されるメッセージはより少なくなります。 デフォルトはNOTICEです。 ここでのLOGの優先順位がlog_min_messagesの場合と異なることに注意してください。

log_min_messages (string)

どのメッセージレベルをサーバログに書き込むかを制御します。 有効な値は、DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORLOGFATALPANIC です。 各レベルには、そのレベル以下のすべてが含まれます。 レベルを低くするほど、ログに送られる情報が少なくなります。 デフォルトは NOTICE です。 ここでのLOGの優先順位がclient_min_messagesの場合と異なることに注意してください。

log_error_verbosity (string)

ログされる各メッセージについて、サーバログに書き出す詳細度を制御します。 有効な値はTERSEDEFAULTVERBOSEであり、それぞれ表示するメッセージのフィールドが追加されていきます。

log_min_error_statement (string)

エラー条件の原因となった SQL 文をサーバログに記録するかを制御します。 設定したレベル以上のエラーを発生させた全てのSQL文がログに記録されます。 デフォルトは PANIC です (実質、通常の使用ではこのオプションは無効になっています)。 有効な値は、DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORFATALPANIC です。 例えば、これを ERROR に設定すると、エラー、致命的なエラー、またはパニックを引き起こした全ての SQL 文がログに記録されます。 このオプションを有効にすると、サーバログに書き出されたエラー発生元を追跡することが容易になります。 スーパーユーザのみがこのオプションを増加させることができます。

log_min_duration_statement (integer)

ログをとる文について、最小の文実行時間を(ミリ秒単位で)設定します。 指定された時間以上かかって実行したすべてのSQL文がその経過時間と共に記録されます。 これをゼロにすると、すべての問い合わせとその経過時間が表示されます。 例えば、250 に設定したとすると、 250ms以上実行にかかったSQL文がすべて記録されます。 このオプションを有効にすると、アプリケーション内で最適化されていない問い合わせを見つけ出す時に役に立ちます。 管理者によってこのオプションが設定された場合、スーパーユーザのみがこれを増加することや1引くことができます。

silent_mode (boolean)

サーバをメッセージ出力無しで実行します。 このオプションを設定すると、サーバは自動的にバックグランドで起動し、制御端末を切り離します。 従って、標準出力や標準エラーには何もメッセージが出力されません。 (postmaster-Sオプションと同じです。) syslogロギングを有効にしていない限り、エラーメッセージを確認することができなくなりますので、このオプションの使用は勧められません。

以下に、これらの設定で使用される各種メッセージの重要度レベルの一覧を示します。

DEBUG[1-5]

開発者によって使用される情報を提供します。

INFO

ユーザによって暗黙的に要求された情報を提供します。 例えばVACUUM VERBOSE処理中。

NOTICE

ユーザに有用であろう情報を提供します。 例えば、長い識別子の切り詰めやプライマリキーの一部としてのインデックスの作成。

WARNING

ユーザに対する警告を提供します。 例えば、トランザクションブロック外部でのCOMMIT

ERROR

現在のトランザクションを中断させる原因となったエラーを報告します。

LOG

管理者に有用な情報を報告します。 例えば、チェックポイントの活動。

FATAL

現在のセッションを中断させる原因となったエラーを報告します。

PANIC

すべてのセッションを中断させる原因となったエラーを報告します。

16.4.5.3. 何をログするか

debug_print_parse (boolean)
debug_print_rewritten (boolean)
debug_print_plan (boolean)
debug_pretty_print (boolean)

これらのオプションは、クライアント、もしくは、サーバログに送信される各種のデバッグ出力を有効にします。 実行された問い合わせそれぞれに対して、最終的なパースツリー、問い合わせ書き換え器の出力、実行計画を出力します。 debug_pretty_print はより読み易くその表示をインデントしますが、出力書式がより長くなります。 client_min_messages もしくは log_min_messages は、 出力をクライアントもしくはサーバログに送信するために、DEBUG1以下にしなければなりません。 デフォルトでは、これらのオプションは無効です。

log_connections (boolean)

これは、成功した接続それぞれの詳細をサーバログに1行追加します。 デフォルトでは、これは無効ですが、おそらく非常に有用です。 このオプションはサーバ起動時、もしくは、postgresql.conf設定ファイル内でのみ設定することができます。

log_duration (boolean)

完了した文それぞれについて、その経過時間をログするようにします。 このオプションを使用するためには、文とプロセスIDを使用した経過時間とを結びつけられるように、log_statementlog_pid を有効にします。 デフォルトは無効です。 管理者によってこれが有効にされた場合、スーパーユーザのみがこのオプションを無効に変更することができます。

log_pid (boolean)

サーバログ内で各メッセージの前に、サーバプロセスのプロセスIDを付与します。 これは、どのメッセージがどの接続に属するかをソートする際に有用です。 デフォルトは無効です。 このパラメータはsyslog経由でログされたメッセージには影響がありません。 常にプロセスIDが含まれているからです。

log_statement (boolean)

各SQL文をログするようにします。 デフォルトは無効です。 管理者によって有効にされた場合、スーパーユーザのみがこのオプションを無効に変更することができます。

log_timestamp (boolean)

各サーバログメッセージの前にタイムスタンプを付与します。 デフォルトは無効です。

log_hostname (boolean)

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

log_source_port (boolean)

接続ログメッセージの中に、接続するホストの送信方向のポート番号を表示します。 このポート番号を使用して、どんなユーザが接続を初期化したかを見つけ出すことができます。 それ以外では、あまり有用ではありませんので、デフォルトでは無効です。 このオプションはサーバ起動時のみ設定することができます。

16.4.6. 実行時統計情報

16.4.6.1. 統計情報の監視

log_statement_stats (boolean)
log_parser_stats (boolean)
log_planner_stats (boolean)
log_executor_stats (boolean)

各問い合わせについて、対応するモジュールの性能統計情報をサーバログに書き出します。 これは粗野なプロファイリング機能です。 デフォルトでは、これらのオプションはすべて無効です。 管理者によってこれらが有効にされた場合、スーパーユーザのみがこれらのオプションを無効にすることができます。

16.4.6.2. 問い合わせ、インデックス統計情報収集器

stats_start_collector (boolean)

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

stats_command_string (boolean)

各セッションで現在実行中のコマンドに関して、そのコマンドが実行した時点の時刻と一緒に統計情報の収集を有効にします。 デフォルトで、このオプションは無効です。 有効にしたとしても、この情報はすべてのユーザには参照することができません。 スーパーユーザとその報告を行なったセッションを所有するユーザのみが見ることができます。 そのため、セキュリティ上の危険性は存在しません。 このデータはpg_stat_activityシステムビューを介してアクセスすることができます。 より詳細については第23章を参照してください。

stats_block_level (boolean)
stats_row_level (boolean)

これらはデータベースの活動に関して、ブロックレベルおよび行レベルの統計情報の収集を有効にします。 デフォルトではこれらのオプションは無効です。 このデータはpg_stat および pg_statio システムビュー系からアクセスすることができます。 より詳細については第23章を参照してください。

stats_reset_on_server_start (boolean)

有効な場合、収集された統計情報はサーバが再起動するとゼロにされます。 無効な場合、統計情報はサーバの再起動を跨って貯められます。 デフォルトでは有効です。 このオプションはサーバ起動時のみ設定することができます。

16.4.7. クライアント接続のデフォルト

16.4.7.1. 文の振舞い

search_path (string)

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

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

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

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

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

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

スキーマの処理に関する詳細については、項5.8 を参照して下さい。

check_function_bodies (boolean)

このパラメータは通常真です。 偽に設定した場合、CREATE FUNCTION中の関数本体文字列の検証が無効になります。 検証を無効にすることは、ダンプから関数定義をリストアする時の前方参照といった問題を防ぐことができ、場合によっては有用です。

default_transaction_isolation (string)

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

詳しくは、第12章SET TRANSACTIONの説明を参照して下さい。

default_transaction_read_only (boolean)

読み取りのみのSQLトランザクションでは、非一時的テーブルを変更することができません。 このパラメータは、各新規トランザクションのデフォルトの読み取りのみ状況を制御します。 デフォルトは偽(読み書き)です。

詳しくは、SET TRANSACTIONを参照してください。

statement_timeout (integer)

指定ミリ秒数を越えた行をすべて中断します。 デフォルト値である、ゼロという値はこのタイマーを無効にします。

16.4.7.2. ロケールと書式

datestyle (string)

日付時刻値の表示書式を設定し、曖昧な日付入力の解釈規則を設定します。 歴史的な理由により、この変数には2つの依存した要素が含まれています。 出力書式指定(ISOPostgresSQLGerman) と日付フィールド順序指定(DMYMDYYMD)です。 これらは分けて設定することもまとめて設定することもできます。 Euro および EuropeanキーワードはDMYの同義語であり、USNonEuroNonEuropeanMDYの同義語です。 より詳細は項8.5を参照してください。 デフォルトは、ISO, MDYです。

timezone (string)

表示用およびタイムスタンプ解釈用のタイムゾーンを設定します。 デフォルトでは、システム環境がタイムゾーンとして指定したものを使用します。 より詳細は項8.5を参照してください。

australian_timezones (boolean)

真の場合、ACSTCSTESTSATは北/南アメリカのタイムゾーンと土曜日ではなく、オーストラリアのタイムゾーンとして解釈されます。 デフォルトは偽です。

extra_float_digits (integer)

このパラメータは、float4float8、幾何データ型などの浮動小数点値の表示桁数を調整します。 パラメータ値が標準的な桁数(FLT_DIG もしくは DBL_DIGどちらか適切な方)に追加されます。 この値は、部分有効数を含めるために 2まで設定することができます。 これは基本的に、正確にリストアする必要がある浮動小数点データをダンプするために有用です。 もしくは、不要な桁を抑制するために負の値を設定することもできます。

client_encoding (string)

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

lc_messages (string)

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

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

lc_monetary (string)

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

lc_numeric (string)

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

lc_time (string)

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

16.4.7.3. その他のデフォルト

explain_pretty_print (boolean)

EXPLAIN VERBOSEが問い合わせツリーの詳細表示にインデント表示するかしないかを決定します。 デフォルトは有効です。

dynamic_library_path (string)

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

max_expr_depth (integer)

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

16.4.8. ロック管理

deadlock_timeout (integer)

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

max_locks_per_transaction (integer)

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

16.4.9. バージョン、プラットフォームの互換性

16.4.9.1. 以前のPostgreSQL バージョン

add_missing_from (boolean)

trueの場合、問い合わせで参照されるテーブルは、もし存在しなければ、自動的にFROM句に追加されます。 デフォルトはFROMで、以前のPostgreSQLリリースと互換性があります。 しかし、この振舞いは標準SQLではなく、また、多くのユーザは失敗を隠すことになるためこれを嫌います。 FROMに存在しないテーブルを参照することを禁じる標準SQLの振舞いのためには、false と設定してください。

regex_flavor (string)

正規表現の"種類"は、advancedextendedbasic.のいずれかに設定することができます。 デフォルトはadvancedです。 正確に7.4より前のPostgreSQLリリースと後方互換を持たせるためにはextended が有用です。

sql_inheritance (boolean)

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

16.4.9.2. プラットフォームとクライアントの互換性

transform_null_equals (boolean)

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

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

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

関連する情報については、項9.2を参照して下さい。

16.4.10. 開発者向けのオプション

以下のオプションは、PostgreSQLのソースに対する作業用のものです。 中には深刻に損傷したデータベースの復旧に役立つものもあります。 実運用のデータベースでこれらを設定する理由はないはずです。 従って、これらはサンプルのpostgresql.confからは除外されています。 これらのオプションの多くは、それを動作させるために特殊なソースコンパイルを必要としていることに注意してください。

debug_assertions (boolean)

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

pre_auth_delay (integer)

非ゼロの場合、ここで指定した秒数分の遅延が新しくサーバプロセスがforkした後、認証プロセスにはいる前に発生します。 これは、認証における誤動作を追跡するために、デバッガを使用してサーバプロセスに接続する機会を提供することを目的としたものです。

trace_notify (boolean)

コマンド LISTENNOTIFY のための大量なデバッグ出力を生成します。 この出力をクライアントもしくはサーバログに送信するためには、それぞれ、client_min_messages もしくは log_min_messagesDEBUG1 以下でなければなりません。

trace_locks (boolean)
trace_lwlocks (boolean)
trace_userlocks (boolean)
trace_lock_oidmin (boolean)
trace_lock_table (boolean)
debug_deadlocks (boolean)
log_btree_build_stats (boolean)

その他の各種のコードを追跡しデバッグするオプションです。

wal_debug (integer)

非ゼロの場合、WAL関連のデバッグ出力が有効になります。

zero_damaged_pages (boolean)

ページヘッダの障害が分かると、通常PostgreSQLはエラーの報告を行ない、現在のトランザクションを中断させます。 zero_damaged_pagesを真に設定することにより、システムは代わりに警告を報告し、障害のあるページをゼロで埋め、処理を継続します。 この動作により、障害のあったページ上にあるすべての行のデータを破壊されます。 しかし、これによりエラーを無視し、正常なページに存在するテーブル内の行を取り出すことができます。 従って、ハードウェアまたはソフトウェアのエラーによって破損が発生した場合のデータの復旧時に有用です。 障害のあるページからのテーブルのデータの復旧をあきらめた場合を除き、通常はこれを真にしてはいけません。 デフォルトは無効であり、スーパーユーザのみ変更可能です。

16.4.11. 短いオプション

利便性のため、パラメータの中には単一文字のコマンドラインオプションスイッチが利用できるものがあります。 表16-1にそれらを示します。

表 16-1. Short option key

短いオプション同義
-B xshared_buffers = x
-d xlog_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]log_statement_stats = on
-S x[a] sort_mem = x
-tpa, -tpl, -te[a]log_parser_stats=on, log_planner_stats=on, log_executor_stats=on
注意:
a. 歴史的な理由から、これらのオプションは postmaster オプションの -o を使用して個々のサーバプロセスに渡される必要があります。たとえば、

$ postmaster -o '-S 1024 -s'

のようなコマンド、もしくは上述のようにクライアント側からの PGOPTIONS を使います。