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

PostgreSQL 8.4.1文書
前のページ | 巻戻し | 第 18章サーバの構成 | 早送り | 次のページ

# 18.10. クライアント接続デフォルト

## 18.10.1. 文の動作

`search_path`（`文字列`）

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

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

  システムカタログのスキーマである`pg_catalog`は、パスでの指定の有無にかかわらず、常に検索されます。 パスで指定されている場合は、指定された順序で検索されます。 `pg_catalog`がパスに含まれていない場合、パスに含まれる項目を検索する前に検索が行われます。

  同様に、現在のセッションの一時テーブルスキーマ`pg_temp_`nnn``も、存在すれば常に検索されます。 これは`pg_temp`という別名を使用してパスに明示的に列挙させることができます。 パスに列挙されていない場合、最初に（`pg_catalog`よりも前に）検索されます。 しかし、一時スキーマはリレーション（テーブル、ビュー、シーケンスなど）とデータ型名に対してのみ検索されます。 関数や演算子名に対してはまったく検索されません。

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

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

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

  スキーマ操作に付いてより多くの情報は、項5.7を参照してください。

`default_tablespace`（`文字列`）

  この変数は、`CREATE`コマンドで明示的にテーブル空間を指定していない場合にオブジェクトの作成先となるデフォルトのテーブル空間を指定します。

  値はテーブル空間名、もしくは現在のデータベースのデフォルトのテーブル空間を使用することを意味する空文字列です。 この値が既存のテーブル空間名と一致しない場合、PostgreSQLは自動的に現在のデータベースのデフォルトのテーブル空間を使用します。 デフォルト以外のテーブル空間が指定された場合、ユーザはそのテーブル空間で`CREATE`権限を持たなければなりません。 さもなくば作成に失敗します。

  この変数は一時テーブル向けには使用されません。 一時テーブル向けには代わりにtemp_tablespacesが考慮されます。

  テーブル空間に付いてより詳細な情報は項21.6を参照してください。

`temp_tablespaces` (`文字列`)

  この変数は、`CREATE`コマンドで明示的にテーブル空間が指定されない場合に、生成する一時オブジェクト（一時テーブルと一時テーブル上のインデックス）を格納するテーブル空間（複数可）を指定します。 大規模データ集合のソートなどを目的とした一時ファイルもまた、このテーブル空間（複数可）に作成されます。

  この値はテーブル空間名のリストです。 リストに複数の名前が存在する場合、一時オブジェクトが作成される度にPostgreSQLは無作為にリストから要素を選択します。 トランザクションの内側は例外で、連続して作成される一時オブジェクトはそのリストで連続するテーブル空間に格納されます。 リスト内の選択された要素が空文字列だった場合、PostgreSQLは自動的に現在のデータベースのデフォルトのテーブル空間を代わりに使用します。

  `temp_tablespaces`を対話式に設定する場合、存在しないテーブル空間を指定するとエラーになります。 ユーザが`CREATE`権限を持たないテーブル空間を指定した場合も同様です。 しかし事前に設定された値を使用する場合、存在しないテーブル空間は無視されます。 ユーザが`CREATE`権限を持たないテーブル空間も同様です。 具体的には、この規則は`postgresql.conf`内で設定した値を使用する場合に適用されます。

  デフォルト値は空文字列です。 この結果、すべての一時オブジェクトは現在のデータベースのデフォルトのテーブル空間内に作成されます。

  default_tablespaceも参照してください。

`check_function_bodies`（`論理値`）

  このパラメータは通常オンです。`off`に設定されると、CREATE FUNCTIONの間で関数本体文字列の妥当性検証を無効にします。妥当性検証を無効にすることは、ダンプから関数定義をリストアする時に参照を転送するような問題を回避する場合には便利です。

`default_transaction_isolation` (`enum`)

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

  より詳細は 第13章 および SET TRANSACTION を調べてください。

`default_transaction_read_only`（`論理値`）

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

  より詳細な情報はSET TRANSACTIONを調べてください。

`session_replication_role` (`enum`)

  現在のセッションでのレプリケーションに関連したトリガおよびルールの発行を制御します。 この変数を設定するにはスーパーユーザ権限が必要で、かつ、これまでにキャッシュされた問い合わせ計画が破棄されることになります。 取り得る値は、`origin`（デフォルト）、`replica`、`local`です。 詳細についてはALTER TABLEを参照してください。

`statement_timeout`（`整数`）

  指定されたミリ秒数以上、コマンドがクライアントからサーバに届いてから経過したどんなコマンドの実行も停止します。 もし、`log_min_error_statement`が`ERROR`もしくはそれ以下に設定されると、タイムアウトする文は同時にログに書き込まれます。値が零（デフォルト）の場合、限度を無効にします。

  すべてのセッションに影響しますので、`postgresql.conf`内で`statement_timeout`を設定することは推奨されません。

`vacuum_freeze_table_age` (`整数`)

  テーブルの`pg_class`.`relfrozenxid`フィールドがこの設定で指定した時期に達すると、`VACUUM`はテーブル全体の走査を行います。 デフォルトは1.5億トランザクションです。 ユーザはこの値をゼロから10億までの任意の値に設定することができますが、`VACUUM`は警告することなく、周回問題対策の自動バキュームがテーブルに対して起動する前に定期的な手動`VACUUM`が実行する機会を持つように、autovacuum_freeze_max_ageの95%に実効値を制限します。 項23.1.4を参照してください。

`vacuum_freeze_min_age` (`整数`)

  `VACUUM`がテーブルスキャン時にトランザクションIDを`FrozenXID`に置き換えるかどうかを決定する際に使用する、カットオフ（トランザクション）年代を指定します。 デフォルトは5千万トランザクションです。 ユーザはこの値を0から10億までの間で任意の値に設定することができますが、`VACUUM`は警告なくautovacuum_freeze_max_ageの半分までの値に値を制限します。 このため、強制的な自動バキュームの間隔が不合理に短くなることはありません。 詳細は項23.1.4を参照してください。

`xmlbinary` (`enum`)

  バイナリデータをXMLに符号化する方法を設定します。 例えばこれは、`xmlelement`や`xmlforest`関数で`bytea`値をXMLに変換する際に適用されます。 取り得る値は`base64`と`hex`です。 どちらもXMLスキーマ標準で定義されています。 デフォルトは`base64`です。 XMLに関連した関数については項9.14を参照してください。

  実のところこの選択はほとんど趣味の問題で、クライアントアプリケーションで起こり得る制限のみに制約されます。 どちらの方法もすべての値をサポートしますが、hex符号化方式はbase64符号化方式より少し大きくなります。

`xmloption` (`enum`)

  XMLと文字列値との変換時に`DOCUMENT`とするか`CONTENT`とするかを設定します。 この説明については項8.13を参照してください。 有効な値は`DOCUMENT`と`CONTENT`です。 デフォルトは`CONTENT`です。

  標準SQLに従うと、このオプションを設定するコマンドは以下のようになります。

      SET XML OPTION { DOCUMENT | CONTENT };

  この構文はPostgreSQLでも使用可能です。

## 18.10.2. ロケールと書式設定

`DateStyle`（`文字列`）

  日付時刻値の表示書式を設定し、曖昧な日付入力の解釈規則を設定します。 歴史的な理由により、この変数には2つの依存した要素が含まれています。 出力書式指定（`ISO`、`Postgres`、`SQL`、`German`）と年/月/日の順序の入出力指定（`DMY`、`MDY`、`YMD`）です。 これらは分けて設定することもまとめて設定することもできます。 `Euro`および`European`キーワードは`DMY`の同義語であり、`US`、`NonEuro`、`NonEuropean`は`MDY`の同義語です。 詳細は項8.5を参照してください。 組み込みのデフォルトは`ISO, MDY`ですが、initdbにより、選択された`lc_time`ロケールの動作に対応した設定で設定ファイルが初期化されます。

`IntervalStyle` (`enum`)

  間隔の値の表示形式を設定します。`sql_standard`値は、SQL標準間隔リテラルに一致する出力を生成します。（デフォルトの）値`postgres`は、DateStyleパラメータが`ISO`に設定されている場合、リリース8.4以前のPostgreSQLに一致する出力を生成します。値`postgres_verbose`は、`DateStyle`パラメータが非`ISO`出力に設定されている場合、リリース8.4以前のPostgreSQLに一致する出力を生成します。値`iso_8601`は、ISO 8601の4.4.3.2節で定義されている時間間隔"format with designators"に一致する出力を生成します。

  また`IntervalStyle`パラメータはあいまいに入力された時間間隔の解釈に影響を与えます。 詳細については項8.5.4を参照してください。

`timezone`（`文字列`）

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

`timezone_abbreviations` (`文字列`)

  サーバで日付時刻の入力として受付け可能となる時間帯省略形の集合を設定します。 デフォルトは`'Default'`です。 これはほぼ全世界で通じる集合です。 また、'Australia'、'India'、その他特定のインストレーションで定義可能な集合が存在します。 詳細は付録Bを参照してください。

`extra_float_digits`（`整数`）

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

`client_encoding`（`文字列`）

  クライアント側符号化方式（文字セット）を設定します。デフォルトはデータベース符号化方式を使用します。

`lc_messages`（`文字列`）

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

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

  サーバログやクライアントに送信されるメッセージに影響するため、スーパーユーザのみがこの設定を変更することができます。

`lc_monetary`（`文字列`）

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

`lc_numeric`（`文字列`）

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

`lc_time`（`文字列`）

  例えば`to_char`系関数における、日付と時間の書式で使用するロケールを設定します。使用可能な値はシステムに依存します。詳細については項22.1を参照してください。 この変数が空に設定された場合（これがデフォルトです）、値はシステムに依存する方法でサーバの実行環境から継承されます。

`default_text_search_config`（`文字列`）

  明示的な設定指定引数を持たないテキスト検索関数の亜種で使用される、テキスト検索設定を選択します。 詳細は第12章を参照してください。 組み込みのデフォルトは`pg_catalog.simple`ですが、initdbは、ロケールに合う設定を認識することができれば、選択された`lc_ctype`ロケールに対応した設定で設定ファイルを初期化します。

## 18.10.3. その他のデフォルト

`dynamic_library_path`（`文字列`）

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

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

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

  もしくは、Windows環境では以下のようになります。

      dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'

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

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

`gin_fuzzy_search_limit` (`整数`)

  GINインデックスにより返されるセットのソフトな上限サイズです。 詳細は項52.4を参照してください。

`local_preload_libraries` (`文字列`)

  この変数は、接続時に事前読み込みされる、1つまたは複数の共有ライブラリを指定します。 複数のライブラリが読み込まれる場合、コンマで名前を区切ってください。 このパラメータは、特定のセッションが開始した後で変更することはできません。

  これはスーパーユーザのみのオプションではありませんので、読み込み可能なライブラリはインストレーションの共有ライブラリディレクトリのサブディレクトリ`plugins`内にあるものに制限されています。 （確実に"安全"なライブラリのみをここにインストールすることはデータベース管理者の責任です。） `local_preload_libraries`内の項目で、たとえば`$libdir/plugins/mylib`のようにこのディレクトリを明示的に指定することも、単にライブラリ名を指定することも可能です。 `mylib` は`$libdir/plugins/mylib`と同じ効果です。

  最初に使用する時にライブラリを読み込む操作とセッション開始時にライブラリを読み込む操作との間に性能的な違いはありません。 しかし、この昨日の目的は、特定のセッションに明示的な`LOAD`コマンドを行わずに、デバッグ用または性能測定用のライブラリを読み込ませることを可能にすることです。 たとえば、このパラメータを`ALTER USER SET`を使用して設定すれば、あるユーザ名で行われるすべてのセッションでデバッグが可能になります。

  指定したライブラリが存在しない場合、接続に失敗します。

  PostgreSQLがサポートするライブラリはすべて、互換性を保証するために検査される"マジックブロック"を持ちます。 このため、この方法でPostgresQL以外のライブラリが読み込まれることはありません。

前のページ | ホーム | 次のページ
自動バキューム | 上に戻る | ロック管理