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

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

19.11.1. 文の動作

client_min_messages (enum)

どのメッセージレベルをクライアントに送るかを管理します。有効な値は、DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOGNOTICEWARNINGおよびERRORです。 それぞれのレベルはそれに続く全てのレベルを包含します。 レベルが後の方になるにつれ、より少ないメッセージが送られます。 デフォルトはNOTICEです。 ここでのLOGの優先順位がlog_min_messagesの場合と異なることに注意してください。

INFOレベルのメッセージは常にクライアントに送られます。

search_path (string)

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

search_pathの値は、スキーマの名前をカンマで区切った一覧でなければなりません。 存在していないスキーマ、またはユーザがUSAGE権限を所有していないスキーマは警告なしに無視されます。

もしそのようなスキーマが存在し、ユーザがそれにたいしてUSAGE権限を所有している場合、一覧内の項目の1つが特別な名前である$userの場合、CURRENT_USERと同じ名前を持つスキーマがあれば、そのスキーマが置換されます。 (このような名前空間がない場合は$userは無視されます。)

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

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

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

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

スキーマの扱いについての詳細は、5.9をご覧ください。 とりわけ、デフォルトの設定はデータベースのユーザが、一人あるいはお互いに信頼できる少数のユーザだけである場合にのみ適切です。

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

row_security (boolean)

この設定値は、行セキュリティポリシーの適用によってエラーを生じさせるかどうかを制御します。 onに設定すると、通常通りポリシーが適用されます。 offにすると、少なくともひとつのポリシーが適用されたクエリは失敗します。 デフォルトはonです。 行の可視性が制限されている場合、offにすると不正な結果を招くことがあります。 たとえば、pg_dumpはデフォルトでoffにしています。 この設定値は、行セキュリティポリシーを迂回するロールには効果がありません。 それはすなわち、BYPASSRLSアトリビュートを持つスーパーユーザです。

行セキュリティポリシーについての更なる情報はCREATE POLICYをご覧ください。

default_table_access_method (string)

このパラメータは、テーブルあるいはマテリアライズドビューの作成時にCREATEコマンドが明示的にアクセスメソッドを指定しないか、あるいはテーブルアクセスメソッドを指定できないSELECT ... INTOが利用された時に使われるデフォルトのテーブルアクセスメソッドを指定します。 デフォルトはheapです。

default_tablespace (string)

この変数は、CREATEコマンドで明示的にテーブル空間を指定していない場合にオブジェクトの作成先となるデフォルトのテーブル空間を指定します。 また、パーティション化されたリレーションが将来パーティションを格納するテーブルスペースを決定します。

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

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

同時に、この変数はデータベース作成時には使用されません。

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

temp_tablespaces (string)

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

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

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

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

default_tablespaceも参照してください

check_function_bodies (boolean)

このパラメータは通常オンです。 offに設定すると、CREATE FUNCTIONの間で関数本体文字列の妥当性検証を無効にします。 妥当性検証を無効にするとその妥当性検証処理の副作用を避け、前方参照による問題から起こる偽陽性(false positive)を避けることができます。 関数をロードする前にこのパラメータを他のユーザとしてoffにします。 pg_dumpはこれを自動的に行います。

default_transaction_isolation (enum)

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

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

default_transaction_read_only (boolean)

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

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

default_transaction_deferrable (boolean)

シリアライザブル隔離レベルで運用されている場合、繰り延べ読み取り専用SQLトランザクションは、その処理の許可の前に遅延されることがあります。 しかし、ひとたび処理が開始されるとシリアライザブル可能性を保障するために必要ないかなるオーバヘッドも発生させません。 従って、シリアル化(直列化)のコードは、このオプションを長期間にわたる読み取り専用トランザクションに対して適切な処置と位置づけ、同時実行の更新の観点から中断を強制する理由はありません。

このパラメータはそれぞれの新規トランザクションのデフォルトでの繰り延べ状態を制御します。 現時点では、読み取り専用トランザクション、またはシリアライザブルより低位の隔離レベルの運用に対して効果はありません。

より詳細はSET TRANSACTIONを参照してください。

session_replication_role (enum)

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

この設定の使い方の趣旨としては、レプリケーションされた更新を適用する際にロジカルレプリケーションシステムがreplicaに設定するということです。 このことによる効果としては、(デフォルトの設定から変更されていない)トリガとルールはレプリカ上では起動されない、ということです。 更なる情報は、ALTER TABLE節のENABLE TRIGGERENABLE RULEをご覧ください。

PostgreSQLはoriginlocalの設定を内部的に同じものとして扱います。 サードパーティのレプリケーションシステムは内部的な目的、たとえばlocalを使ってレプリケーションされるべきでないセッションを指定するためにこれら2つの値を使って構いません。

外部キーはトリガとして実装されているため、このパラメータをreplicaとすることによって同時にすべての外部キー検査が無効になります。 このことにより、正しく使用しないと、データを不整合状態にしてしまう可能性があります。

statement_timeout (integer)

コマンドがクライアントからサーバに届いた時から数えて、実行時間が指定された時間を越えた文を停止します。 log_min_error_statementERRORもしくはそれ以下に設定されている場合は、タイムアウトした文はログに書き込まれます。 この値が単位なしで指定された場合は、ミリ秒単位であるとみなします。 値がゼロ(デフォルト)の場合、これを無効にします。

タイムアウトは、コマンドがサーバに到着したときから、サーバがそのコマンドの実行を完了するまでを基準にします。 拡張問い合わせでは、タイムアウトは問い合わせに関するメッセージ(Parse、Bind、Execute、Describe)が到着したときに開始し、ExecuteあるいはSyncメッセージが完了した時にキャンセルされます。

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

lock_timeout (integer)

テーブル、インデックス、行、またはその他のデータベースオブジェクトに対してロック獲得を試みている最中、指定された時間を超えて待機するいかなる命令も停止されます。 時間制限はそれぞれのロック取得の試みに対し個別に適用されます。 制限は明示的ロック要求(例えばLOCK TABLE、またはSELECT FOR UPDATE without NOWAITなど)および暗黙的に取得されるロックに適用されます。 この値が単位なしで指定された場合は、ミリ秒単位であるとみなします。 値ゼロ(デフォルト)はこの機能を無効にします。

statement_timeoutと異なり、このタイムアウトはロックを待機しているときのみ発生します。 命令によるタイムアウトは常に第一に起動されるため、もしstatement_timeoutが非ゼロであればlock_timeoutを同一、もしくはより大きい値に設定するのは的を射ていません。 log_min_error_statementERRORまたはそれより低く設定されると、時間制限を超えた命令はログに記録されます。

lock_timeoutpostgresql.confにて設定することは、すべてのセッションに影響を与える可能性があるため推奨されません。

idle_in_transaction_session_timeout (integer)

開いているトランザクションが、指定された時間を超えてアイドルだった場合に、セッションを終了します。 これにより、そのセッションが獲得したロックを解放し、コネクションスロットを再利用できるようになります。 また、このトランザクションからのみ見えるタプルがVACUUMできるようになります。 更なる詳細は24.1を見てください。

この値が単位なしで指定された場合は、ミリ秒単位であるとみなします。 値がゼロ(デフォルト)の場合、この機能は無効になります。

vacuum_freeze_table_age (integer)

テーブルのpg_class.relfrozenxidフィールドがこの設定で指定した時期に達すると、VACUUMは積極的なテーブル走査を行います。 積極的な走査は、無効タプルを含む可能性のあるページだけではなく、凍結されていないXIDあるいはMXIDを含むすべてのページを読む点で通常のVACUUMとは異なります。 デフォルトは1.5億トランザクションです。 ユーザはこの値をゼロから20億までの任意の値に設定することができますが、VACUUMは警告することなく、周回問題対策のautovacuumがテーブルに対して起動する前に定期的な手動VACUUMが実行する機会を持つように、autovacuum_freeze_max_ageの95%に実効値を制限します。 詳細は24.1.5を参照してください。

vacuum_freeze_min_age (integer)

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

vacuum_multixact_freeze_table_age (integer)

pg_class.relminmxidフィールドがこの設定値で指定した年代に達するとVACUUMはテーブルの積極的なスキャンを行います。 積極的なスキャンは、無効タプルを含む可能性のあるページだけではなく、凍結XIDあるいはMXIDを含むすべてのページを読む点で通常のVACUUMとは異なります。 デフォルトは1億5千万トランザクションです。 ユーザは0から20億まで任意の値を設定できますが、テーブルに対してラップアラウンド防止処理が起動される前に定期的な手動VACUUMが走ることができるように、VACUUMautovacuum_multixact_freeze_max_ageの95%に暗黙的に制限します。 詳細は24.1.5.1をご覧ください。

vacuum_multixact_freeze_min_age (integer)

VACUUMがテーブルをスキャンする際に、マルチトランザクションIDをより新しいトランザクションIDまたはマルチトランザクションIDに置き換えるかどうかを決める下限値をマルチトランザクション単位で指定します。 ユーザは0から10億まで任意の値を設定できますが、強制的な自動バキュームの間隔が短くなり過ぎないように、VACUUMautovacuum_multixact_freeze_max_ageの半分に暗黙的に実効的な値を制限します。 詳細は24.1.5.1をご覧ください。

vacuum_cleanup_index_scale_factor (floating point)

VACUUMクリーンアップステージで、前回の収集統計情報中でカウントされ、インデックススキャンせずに統計情報を挿入できる合計ヒープタプル数の割合を指定します。 この設定は今の所B-treeインデックスのみに適用されます。

ヒープから削除されたタプルがない場合、次の条件のうち一つでも当てはまればB-treeインデックスはスキャンされます。 インデックスの統計情報が古い、あるいはインデックスに削除されたページが含まれていてクリーンアップ中に再利用できる場合です。 新しく挿入されたタプル数の、以前の統計情報収集によって検出されたヒープタプルの合計に対する割合が、vacuum_cleanup_index_scale_factorで指定された値よりも多いときにインデックスの統計情報は古いと見なされます。 ヒープタプルの合計数はインデックスのメタページに格納されています。 VACUUMが不要タプルがないことを確認するまでメタデータページはこのデータを含まないことに留意してください。 ですから、2番目あるいはそれ以降のVACUUMサイクルが不要タプルがないことを確認できるまで、クリーンアップステージでのB-treeインデックスのスキャンは単にスキップされるだけです。

この値は0から10000000000までの値を取ることができます。 vacuum_cleanup_index_scale_factor0に設定されると、インデックススキャンは決してVACUUMクリーンアップ中にスキップされません。 デフォルト値は0.1です。

bytea_output (enum)

bytea型の値の出力形式を設定します。 有効な値はhex(デフォルト)、およびescape(PostgreSQLの伝統的な書式)です。 より詳細は8.4を参照してください。 bytea型は常にこの設定に係わらず、入力時に双方の書式を受け付けます。

xmlbinary (enum)

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

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

xmloption (enum)

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

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

SET XML OPTION { DOCUMENT | CONTENT };

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

gin_pending_list_limit (integer)

fastupdateが有効なときに使用されるGINインデックスのペンディングリストの最大サイズを設定します。 リストがこの設定値よりも大きくなったら、エントリをインデックスのGINの主データ構造に一括転送してリストはクリアされます。 この値が単位なしで指定された場合は、キロバイト単位であるとみなします。 デフォルトは4メガバイト(4MB)です。 この設定は、個々のGINインデックスに対してインデックスストレージパラメータを変更することにより、上書きできます。 更なる情報については、66.4.166.5を参照してください。

19.11.2. ロケールと書式設定

DateStyle (string)

日付時刻値の表示書式を設定し、曖昧な日付入力の解釈規則を設定します。 歴史的な理由により、この変数には2つの独立した要素が含まれています。 出力書式指定(ISOPostgresSQLGerman)と年/月/日の順序の入出力指定(DMYMDYYMD)です。 これらは分けて設定することもまとめて設定することもできます。 EuroおよびEuropeanキーワードはDMYの同義語であり、USNonEuroNonEuropeanMDYの同義語です。 詳細は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 (string)

表示用およびタイムスタンプ解釈用の時間帯を設定します。 組み込まれているデフォルトはGMTですが、通常はpostgresql.confにより上書きされます。initdbによりこれらと関連した設定をシステム環境にインストールされます。 詳細は8.5.3を参照してください。

timezone_abbreviations (string)

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

extra_float_digits (integer)

このパラメータは、float4float8、幾何データ型などにおいて、浮動小数点数値のテキスト形式の出力で使用される桁数を調整します。

この値が1(デフォルト)あるいはそれ以上なら、浮動小数点数値の出力は最も短い精度の形式で出力されます。 8.1.3を参照してください。 生成される実際の桁数は出力される値にのみ依存します。 float8値では最大でも17桁、float4値では最大9桁必要です。 この形式は高速かつ高精度で、正しく読まれる際には元の2進数における浮動小数点値を正確に保存します。 歴史的な互換性の理由により、3までの値が許容されています。

この値がゼロまたは負なら、出力は与えられた10進精度に丸められます。 使用される精度は、各々の型の標準的の桁数(型に応じてFLT_DIGあるいはDBL_DIG)がこのパラメータの値により制限されたものになります。 (たとえば、-1にするとfloat4値は5桁に、float8値では14桁に丸められます。) この形式は低速、かつ元の2進数における浮動小数点値のビットを保存しませんが、人間にとってより読みやすいかも知れません。

注記

このパラメータの意味とデフォルト値はPostgreSQL 12で変更されました。 更なる議論については8.1.3をご覧ください。

client_encoding (string)

クライアント側符号化方式(文字セット)を設定します。デフォルトはデータベース符号化方式を使用します。 PostgreSQLサーバでサポートされている文字セットは23.3.1に記載されています。

lc_messages (string)

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

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

サーバログやクライアントに送信されるメッセージに影響するため、および、全ての不適切な値がサーバログの信頼性を損ねる可能性があるため、スーパーユーザのみがこの設定を変更することができます。

lc_monetary (string)

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

lc_numeric (string)

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

lc_time (string)

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

default_text_search_config (string)

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

19.11.3. 共有ライブラリのプリロード

追加機能や性能改良の目的で共有ライブラリをプリロードするいくつかの設定があります。 たとえば'$libdir/mylib'を設定するとmylib.so(あるいは他のプラットフォームではmylib.sl)を導入設定したの標準ディレクトリからプリロードします。 各設定の違いは、設定変更を行うためにいつ、どのような権限が必要かにあります。

典型的には'$libdir/plXXX'のような構文を用いてPostgreSQL手続き言語ライブラリをこの方法でプリロードできます。 XXXpgsqlperltclpythonです。

PostgreSQLで使用することを意図したライブラリだけがこの方法でロードできます。 すべてのPostgreSQL用のライブラリはmagic blockを持ち、互換性を保証するためにチェックされます。 ですからPostgreSQL用ではないライブラリはこの方法ではロードできません。 LD_PRELOADのようなOSの機能を使えばあるいは使用できるかもしれません。

一般的に言ってモジュールのドキュメントを参照し、推奨される方法でロードしてください。

local_preload_libraries (string)

この変数は、接続時に事前読み込みされる、1つまたは複数の共有ライブラリを指定します。 ここにはカンマ区切りでライブラリ名のリストを格納し、各々の名前はLOADコマンドと同じように解釈されます。 項目の間の空白は無視されます。 名前の中に空白あるいはカンマを含める場合は、二重引用符で囲ってください。 このパラメータは、接続の開始時にのみ効果があります。 以降の変更は効果がありません。 もし指定したライブラリが見つからない場合は、接続は失敗します。

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

この機能の意図するところは、明示的なLOADコマンドを使わずに、特定のセッションにおいて非特権ユーザがデバッグ用あるいは性能計測用のライブラリをロードできるようにすることにあります。 そのためにも、クライアント側でPGOPTIONS環境変数を使う、あるいはALTER ROLE SETを使うことが典型的になるでしょう。

しかし、モジュールが特にスーパーユーザ以外に使われることを意図しているのでない限り、通常この方法は正しい使い方ではありません。 代わりにsession_preload_librariesを見てください。

session_preload_libraries (string)

この変数は接続開始時にプリロードされる一つ以上の共有ライブラリを指定します。 ここにはカンマ区切りでライブラリ名のリストを格納し、各々の名前はLOADコマンドで解釈されます。 名前の中に空白あるいはカンマを含める場合は、二重引用符で囲ってください。 スーパーユーザだけがこの設定を変更できます。 このパラメータは接続開始時にのみ有効です。 以降の変更は効果がありません。 もし指定したライブラリが見つからない場合は、接続は失敗します。 スーパーユーザだけがこの設定を変えられます。

この機能は、デバッグや性能測定の目的でLOADコマンドを使わずに特定のセッションでライブラリをロードする目的で使われます。 たとえばALTER ROLE SETで設定することにより、特定のユーザが開始するすべてのセッションでauto_explainが有効になります。 また、このパラメータはサーバを再起動せずに変更できます(しかし変更は新しいセッションが開始するときにのみ有効となります)。すべてのセッションで有効にしたいのであれば、この方法で新しいモジュールを容易に追加できます。

shared_preload_librariesと違って、ライブラリがはじめて使われるときにロードする方法と比べてセッションが開始するときにライブラリをロードする方法には大きな性能的な優位性はありません。 しかし、コネクションプーリングを使うのであれば、いくらか優位性があります。

shared_preload_libraries (string)

この変数はサーバ起動時にプリロードされる一つ以上の共有ライブラリを指定します。 スーパーユーザだけがこの設定を変更できます。 このパラメータはサーバ起動時にのみ設定可能です。 もし指定したライブラリが見つからない場合は、起動は失敗します。

ライブラリによってはpostmaster起動時にのみ可能な操作を実行する必要があるものがあります。 たとえば、共有メモリの獲得、軽量ロックの予約、バックグラウンドワーカの起動などです。 このようなライブラリはこのパラメータを使ってサーバ起動時にロードしなければなりません。 詳細は各ライブラリのドキュメントを見てください。

これ以外のライブラリもプリロードできます。 共有ライブラリをプリロードすることにより、最初にライブラリが使われる際にライブラリが起動する時間を避けることができます。 しかし、そのライブラリが使われないとしても、サーバプロセスが起動する時間がわずかに長くなる可能性があります。 したがって、この方法は、ほとんどのセッションで使われるライブラリにのみ使用することを推奨します。 また、パラメータの変更にはサーバの再起動が必要になります。 ですから、たとえば短期のデバッグ仕事にこの設定を使うのは適当とは言えません。 session_preload_librariesを代わりに使ってください。

注記

Windowsのホストでは、ライブラリのプリロードは、新しいサーバプロセスの起動に要する時間を短縮しません。 個々のサーバプロセスは、すべてのプリロードライブラリを再読み込みします。 それでもpostmaster起動時に操作を実行しなければならないライブラリを使用するWindowsホストにとってはshared_preload_librariesは有用です。

jit_provider (string)

この変数は、使用するJITプロバイダライブラリ(31.4.2参照)の名前です。 デフォルトはllvmjitです。 このパラメータはサーバ起動時にのみ設定可能です。

存在しないライブラリが指定されると、JITは利用できませんが、エラーは起こりません。 これにより、PostgreSQLパッケージとは別にJITサポートをインストールできるようになります。

19.11.4. その他のデフォルト

dynamic_library_path (string)

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

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 (integer)

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