SET variable { TO | = } { value | 'value' | DEFAULT } SET CONSTRAINTS {ALL | constraintlist} mode SET TIME ZONE { 'timezone' | LOCAL | DEFAULT } SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
設定可能なグローバルパラメータ。
パラメータに設定する値。 DEFAULT を使えば、そのパラメータをデフォ ルト値に戻すように指定することができます。 文字列のリストを使うこともできますが、その要素が複雑な場 合、単一引用符か二重引用符で括らなければならな い場合があります。
設定可能な変数とその取り得る値は次の通りです。
クライアント側のマルチバイト符合化方式を設定します。 値として以下のものがあります。
クライアント側のマルチバイト符合化方式を value に設定 します。 指定する符合化方式はバックエンドでサポートされたもの でなければなりません。
このオプションは、Postgres 構築時の configure 実行段階に MULTIBYTE サポートを有効にした場合にのみ使用することがで きます。
日付 / 時刻の表現方式を設定します。 出力の書式に影響します。 また、入力の解釈に影響する場合もあります。
ISO 8601 形式の日付と時刻を使用します。
Oracle/Ingres 形式の日付と時刻を使用します。
従来からの Postgres 形 式を使用します。
数値型の日付表現に dd/mm/yyyy を使用します。
数値型の日付表現に mm/dd/yyyy を 使用します。
数値型の日付表現に dd.mm.yyyy を 使用します。
NonEuropean と同一です。
デフォルト値 (ISO) に戻します。
日付の書式は以下のように初期化されます。
環境変数 PGDATESTYLE の設定。 PGDATESTYLE が libpq を使用したクライアントのフロントエンド 環境にて設定されていた場合、libpq はその接続開始時に DATESTYLE を自動的に PGDATESTYLE の値に設定します。 |
日付を European 規定に設定するよう に、-o -e オプションを指定した postmaster の起動。 これがある日付形式の組合せのみに影響を与えることに注意 して下さい。 例えば、このパラメータは ISO 形式に影響を与えません。 |
src/backend/utils/init/globals.c 内の変数の変更。 |
以下のglobals.c 内の変数を変更する ことができます。
bool EuroDates = false | true |
int DateStyle = USE_ISO_DATES | USE_POSTGRES_DATES | USE_SQL_DATES | USE_GERMAN_DATES |
乱数生成用の内部シードを設定します。
このシードの値は random カタロ グ関数にて使用されます。 0 から 1 までの浮動小数値を設定して下さい。 後でこの値と RAND_MAX とで掛け算が行なわれます。 範囲外の値が設定された場合、この掛け算によって内部で オーバーフローが発生します。
このシードはsetseed SQL 関数を 呼び出して設定することもできます。
SELECT setseed(value);
このオプションは、Postgres 構築時の configure 実行段階に MULTIBYTE サポートを有効にした場合にのみ使用することがで きます。 (訳注: 単なる編集ミスと思われます。)
サーバ側のマルチバイト符合化方式を設定します。
サーバ側符合化方式の識別子。
このオプションは、Postgres 構築時の configure 実行段階に MULTIBYTE サポートを有効にした場合にのみ使用することがで きます。
SET CONSTRAINTS は現在のトランザクションにおける制約の 評価に影響を与えます。 SQL3 の仕様では、SET CONSTRAINTS は次のパラメータを取り得ます。
カンマで区切られた、延期可能な制約名のリスト。
制約モード。 DEFERRED または IMMEDIATE が設定可能な値です。
IMMEDIATE モードでは、外部キー制約は各問い 合わせの終りでチェックされます。
DEFERRED モードでは、 DEFERRABLE とした外部キー制約はトランザ クションがコミットされた時、もしくは、そのモードが明示的 に IMMEDIATE に設定された段階でチェック されます。 実際には、外部キー制約に対してのみ行なわれますので、UNIQUE などその他の制約には適用されません。
タイムゾーンに設定可能な値は使用するオペレーションシステム に依存します。 例えば Linux では、タイムゾーンのデータベースは /usr/lib/zoneinfo にあります。
タイムゾーン用に有効な値を数点示します。
カリフォルニア用タイムゾーンに設定します。
ポルトガル用タイムゾーンに設定します。
イタリア用タイムゾーンに設定します。
使用しているシステムのローカルなタイムゾーン(環境 変数 TZ の値)をタイムゾーンに設定します。
無効なタイムゾーンが指定された場合、タイムゾーンは (ほと んどのシステムで、いいかげんながらも)GMT になります。
上の 2 番目の構文では、SQL92 の SET TIME ZONE に似た構文でタイムゾーン の設定ができます。 キーワード LOCAL は SQL92 互換のために用意された、単なる DEFAULT の別の形式です。
libpq を使用したクライアントのフロントエンド環境で、環境 変数 PGTZ が設定されていた場合、libpq はその接続開始時に TIMEZONE を自動的に PGTZ の値に設定します。
現在のトランザクションの隔離レベルを設定します。
現在のトランザクションでの問い合わせは、問い合わせが 始まる前にコミットされた行のみを読みとります。 READ COMMITTED がデフォルトです。
Note: SQL92 標準では、SERIALIZABLE をデフォルトの隔離レベルとすることを要求しています。
現在のトランザクションでの問い合わせは、そのトラン ザクションで最初に行なわれる DML 文( SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO) より前にコミットされた行のみを読みとります。
SET コマンドで指定できるパラメータには、 以下のような内部使用用、または、最適化用のものもいくつか 存在します。
各種のバックエンドパラメータを設定します。
オプティマイザおける、不連続なディスク上のページ読みとりに係るコスト の評価値を設定します。 この値は連続ページ読みとりに係るコストを何倍するのかを意味します。
ランダムなページアクセスのコストを指定した浮動小 数値に設定します。
オプティマイザにおける、問い合わせ中の各タプル処理に係るコストの評 価値を設定します。 この値は連続ページ読みとりに係るコストのうち、このコストが占め る割合を意味します。
タプル当たりの CPU 処理コストを指定した浮動小数値に 設定します。
オプティマイザにおける、インデックススキャン中の各インデックス用 タプル処理に係るコストの評価値を設定します。 この値は連続ページ読みとりに係るコストのうち、このコストが占め る割合を意味します。
インデックス用タプル当たりの CPU 処理コストを指定し た浮動小数値に設定します。
オプティマイザにおける、WHERE 句における各演算子に対する処理 に係るコストの評価値を設定します。 この値は連続ページ読みとりに係るコストのうち、このコストが占め る割合を意味します。
演算子当たりの CPU 処理コストを指定した浮動小数値 に設定します。
オプティマイザにおける、有効なディスクキャッシュ (つまり、カーネルのディスクキャッシュの内、Postgres のデー タファイルに使われる部分)の仮定サイズを設定します。 この値はディスクページの個数を意味します。 通常ディスクページは 8kb です。
仮定キャッシュサイズを指定した浮動小数値に設定します。
プランナがシーケンシャルスキャン計画型を使用することを有 効、もしくは、無効にします。 (完全にシーケンシャルスキャンを停止することはできません。 しかし、もし他の方法が使用可能であれば、この変数を OFF に することで、プランナはシーケンシャルスキャンを使用しないよ うになります。)
シーケンシャルスキャンの使用を有効にします。 (デフォルトの設定です。)
シーケンシャルスキャンの使用を無効にします。
プランナがインデックススキャン計画型を使用することを有 効、もしくは、無効にします。
インデックススキャンの使用を有効にします。 (デフォルトの設定します。)
インデックススキャンの使用を無効にします。
プランナがTID スキャン計画型を使用することを有効、もしく は、無効にします。
TID スキャンの使用を有効にします。 (デフォルトの設定です。)
TID スキャンの使用を無効にします。
プランナが明示的なソート段階を使用することを有効、もしく は、無効にします。 (明示的なソートを完全に停止することはできません。 しかし、もし他の方法が使用可能であれば、この変数を OFF にすることで、プランナは明示的なソートを使わないように なります。)
ソートの使用を有効にします。(デフォルトの設定です。)
ソートの使用を無効にします。
プランナが入れ子状ループ結合計画を使用することを有効、もしく は、無効にします。 (完全に入れ子状ループ結合を停止することはできません。 しかし、もし他の方法が使用可能であれば、この変数を OFF にする ことで、プランナはこの計画を使わないようになります。)
入れ子状ループ結合の使用を有効にします。 (デフォルトの設定です。)
入れ子状ループ結合の使用を無効にします。
プランナがマージ結合計画を使用することを有効、もしく は、無効にします。
マージ結合の使用を有効にします。(デフォルトの設定です。)
マージ結合の使用を無効にします。
プランナがハッシュ結合計画を使用することを有効、もしく は、無効にします。
ハッシュ結合の使用を有効にします。(デフォルトの設定です。)
ハッシュ結合の使用を無効にします。
遺伝的最適化アルゴリズムの使用に関する閾値を設定します。
文が 11 個以上のテーブルを持つ場合に遺伝的最適化アル ゴリズムを有効にします。 (これはデフォルトの設定です。)
引数として整数 # をとり、 問い合わせ内に # 個以上 のテーブルを持つ文の場合、遺伝的最適化アルゴリズムを 有効にします。
遺伝的最適化アルゴリズムを無効にします。
問い合わせ最適化についてのより詳細については、プログラ マガイドの GEQO の章を参照して下さい。
libpq を使用したクライアントのフロントエンド環境で環境 変数 PGGEQO を設定していた場合、libpq はその接続開始時に GEQO を自動的に PGGEQO の値に設定します。
キーセット問い合わせオプティマイザ に よって問い合わせプランナは、 ("WHERE (a=1 AND b=2) OR (a=2 AND b=3) ..." のような) WHERE 句に多くの AND 句を OR で結んだ形の句を持つ問い合わせを UNION 問い合わせに変換します。 この方法はデフォルトの実装よりも高速になりますが、UNION は、 同一の出力行を除くように暗黙的に SELECT DISTINCT 句を付け加 えるため、必ずしも全く同一な結果になりません。 KSQO は通常、MicroSoft Access の ような、このような形の問い合わせを生成する傾向がある製品を使 用する場合に使われます。
この最適化を有効にします。
この最適化を無効にします。(デフォルトの設定です。)
SET KSQO=OFF の指定と同一です。
KSQO アルゴリズムは、多くの OR で結ばれた AND 句を持つ問い 合わせでは必須なものでしたが、Postgres 7.0 以降では、標準の プランナでも十分にうまくこのような問い合わせを扱うことがで きます。
パーサが受け付けることができる、入れ子状の式の深さの最大値 を設定します。 デフォルト値は通常の問い合わせでは十分なほど大きな値ですが、 必要に応じて高めることができます。 (しかし、あまりにも大きな値に設定すると、スタックオーバフロー のためにバックエンドがクラッシュする危険性が発生します。)
深さの最大値。
SET はあるセッションにおける引数 variable の 設定パラメータを変更します。
現在の値は SHOW を使って入手でき、また、その値 は RESET を使ってデフォルト値に戻すことができ ます。 パラメータ名と値は大文字小文字を区別しません。 値のフィールドは常に文字列として指定する、つまり、単一引用符 で括られていることに注意して下さい。
SET TIME ZONE はそのセッションにおけるタイ ムゾーンのデフォルトオフセットを変更します。 1 つの SQL セッションは常に初期のデフォルトタイムゾーンオフ セットを持って始まります。 SET TIME ZONE 文は、現在の SQL セッション 用のタイムゾーンのデフォルトオフセットを変更することに使われ ます。
日付の形式を ISO に設定します。(引数の引用符で括る必要はありません。)
SET DATESTYLE TO ISO;4 個以上のテーブルを持つ問い合わせに対して GEQO を有効にします。 (引数 value の内部に等号サイン (=) を持つため、単一引用符 を使用していることに注意して下さい。)
SET GEQO = 'ON=4';GEQO をデフォルト値に戻します。
SET GEQO = DEFAULT;カリフォルニア、バークレイ用のタイムゾーンに設定します。 タイムゾーン指示子の大文字という特質を保持するために二重 引用符を使用しています。
SET TIME ZONE "PST8PDT"; SELECT CURRENT_TIMESTAMP AS today; today ------------------------ 1998-03-31 07:41:21-08
SET TIME ZONE 'Europe/Rome'; SELECT CURRENT_TIMESTAMP AS today; today ------------------------ 1998-03-31 17:41:31+02