SET

Name

SET  --  セッションにおける実行時パラメータを設定する。

Synopsis

SET variable { TO | = } { value | 'value' | DEFAULT }
SET CONSTRAINTS {ALL | constraintlist} mode
SET TIME ZONE { 'timezone' | LOCAL | DEFAULT }
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
  

入力

variable

設定可能なグローバルパラメータ。

value

パラメータに設定する値。 DEFAULT を使えば、そのパラメータをデフォ ルト値に戻すように指定することができます。 文字列のリストを使うこともできますが、その要素が複雑な場 合、単一引用符か二重引用符で括らなければならな い場合があります。

設定可能な変数とその取り得る値は次の通りです。

CLIENT_ENCODING | NAMES

クライアント側のマルチバイト符合化方式を設定します。 値として以下のものがあります。

value

クライアント側のマルチバイト符合化方式を value に設定 します。 指定する符合化方式はバックエンドでサポートされたもの でなければなりません。

このオプションは、Postgres 構築時の configure 実行段階に MULTIBYTE サポートを有効にした場合にのみ使用することがで きます。

DATESTYLE

日付 / 時刻の表現方式を設定します。 出力の書式に影響します。 また、入力の解釈に影響する場合もあります。

ISO

ISO 8601 形式の日付と時刻を使用します。

SQL

Oracle/Ingres 形式の日付と時刻を使用します。

Postgres

従来からの Postgres 形 式を使用します。

European

数値型の日付表現に dd/mm/yyyy を使用します。

NonEuropean

数値型の日付表現に mm/dd/yyyy を 使用します。

German

数値型の日付表現に dd.mm.yyyy を 使用します。

US

NonEuropean と同一です。

DEFAULT

デフォルト値 (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

SEED

乱数生成用の内部シードを設定します。

value

このシードの値は random カタロ グ関数にて使用されます。 0 から 1 までの浮動小数値を設定して下さい。 後でこの値と RAND_MAX とで掛け算が行なわれます。 範囲外の値が設定された場合、この掛け算によって内部で オーバーフローが発生します。

このシードはsetseed SQL 関数を 呼び出して設定することもできます。

SELECT setseed(value);
	    

このオプションは、Postgres 構築時の configure 実行段階に MULTIBYTE サポートを有効にした場合にのみ使用することがで きます。 (訳注: 単なる編集ミスと思われます。)

SERVER_ENCODING

サーバ側のマルチバイト符合化方式を設定します。

value

サーバ側符合化方式の識別子。

このオプションは、Postgres 構築時の configure 実行段階に MULTIBYTE サポートを有効にした場合にのみ使用することがで きます。

CONSTRAINTS

SET CONSTRAINTS は現在のトランザクションにおける制約の 評価に影響を与えます。 SQL3 の仕様では、SET CONSTRAINTS は次のパラメータを取り得ます。

constraintlist

カンマで区切られた、延期可能な制約名のリスト。

mode

制約モード。 DEFERRED または IMMEDIATE が設定可能な値です。

IMMEDIATE モードでは、外部キー制約は各問い 合わせの終りでチェックされます。

DEFERRED モードでは、 DEFERRABLE とした外部キー制約はトランザ クションがコミットされた時、もしくは、そのモードが明示的 に IMMEDIATE に設定された段階でチェック されます。 実際には、外部キー制約に対してのみ行なわれますので、UNIQUE などその他の制約には適用されません。

TIME ZONE, TIMEZONE

タイムゾーンに設定可能な値は使用するオペレーションシステム に依存します。 例えば Linux では、タイムゾーンのデータベースは /usr/lib/zoneinfo にあります。

タイムゾーン用に有効な値を数点示します。

PST8PDT

カリフォルニア用タイムゾーンに設定します。

Portugal

ポルトガル用タイムゾーンに設定します。

'Europe/Rome'

イタリア用タイムゾーンに設定します。

DEFAULT

使用しているシステムのローカルなタイムゾーン(環境 変数 TZ の値)をタイムゾーンに設定します。

無効なタイムゾーンが指定された場合、タイムゾーンは (ほと んどのシステムで、いいかげんながらも)GMT になります。

上の 2 番目の構文では、SQL92 の SET TIME ZONE に似た構文でタイムゾーン の設定ができます。 キーワード LOCAL は SQL92 互換のために用意された、単なる DEFAULT の別の形式です。

libpq を使用したクライアントのフロントエンド環境で、環境 変数 PGTZ が設定されていた場合、libpq はその接続開始時に TIMEZONE を自動的に PGTZ の値に設定します。

TRANSACTION ISOLATION LEVEL

現在のトランザクションの隔離レベルを設定します。

READ COMMITTED

現在のトランザクションでの問い合わせは、問い合わせが 始まる前にコミットされた行のみを読みとります。 READ COMMITTED がデフォルトです。

Note: SQL92 標準では、SERIALIZABLE をデフォルトの隔離レベルとすることを要求しています。

SERIALIZABLE

現在のトランザクションでの問い合わせは、そのトラン ザクションで最初に行なわれる DML 文( SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO) より前にコミットされた行のみを読みとります。

SET コマンドで指定できるパラメータには、 以下のような内部使用用、または、最適化用のものもいくつか 存在します。

PG_OPTIONS

各種のバックエンドパラメータを設定します。

RANDOM_PAGE_COST

オプティマイザおける、不連続なディスク上のページ読みとりに係るコスト の評価値を設定します。 この値は連続ページ読みとりに係るコストを何倍するのかを意味します。

float8

ランダムなページアクセスのコストを指定した浮動小 数値に設定します。

CPU_TUPLE_COST

オプティマイザにおける、問い合わせ中の各タプル処理に係るコストの評 価値を設定します。 この値は連続ページ読みとりに係るコストのうち、このコストが占め る割合を意味します。

float8

タプル当たりの CPU 処理コストを指定した浮動小数値に 設定します。

CPU_INDEX_TUPLE_COST

オプティマイザにおける、インデックススキャン中の各インデックス用 タプル処理に係るコストの評価値を設定します。 この値は連続ページ読みとりに係るコストのうち、このコストが占め る割合を意味します。

float8

インデックス用タプル当たりの CPU 処理コストを指定し た浮動小数値に設定します。

CPU_OPERATOR_COST

オプティマイザにおける、WHERE 句における各演算子に対する処理 に係るコストの評価値を設定します。 この値は連続ページ読みとりに係るコストのうち、このコストが占め る割合を意味します。

float8

演算子当たりの CPU 処理コストを指定した浮動小数値 に設定します。

EFFECTIVE_CACHE_SIZE

オプティマイザにおける、有効なディスクキャッシュ (つまり、カーネルのディスクキャッシュの内、Postgres のデー タファイルに使われる部分)の仮定サイズを設定します。 この値はディスクページの個数を意味します。 通常ディスクページは 8kb です。

float8

仮定キャッシュサイズを指定した浮動小数値に設定します。

ENABLE_SEQSCAN

プランナがシーケンシャルスキャン計画型を使用することを有 効、もしくは、無効にします。 (完全にシーケンシャルスキャンを停止することはできません。 しかし、もし他の方法が使用可能であれば、この変数を OFF に することで、プランナはシーケンシャルスキャンを使用しないよ うになります。)

ON

シーケンシャルスキャンの使用を有効にします。 (デフォルトの設定です。)

OFF

シーケンシャルスキャンの使用を無効にします。

ENABLE_INDEXSCAN

プランナがインデックススキャン計画型を使用することを有 効、もしくは、無効にします。

ON

インデックススキャンの使用を有効にします。 (デフォルトの設定します。)

OFF

インデックススキャンの使用を無効にします。

ENABLE_TIDSCAN

プランナがTID スキャン計画型を使用することを有効、もしく は、無効にします。

ON

TID スキャンの使用を有効にします。 (デフォルトの設定です。)

OFF

TID スキャンの使用を無効にします。

ENABLE_SORT

プランナが明示的なソート段階を使用することを有効、もしく は、無効にします。 (明示的なソートを完全に停止することはできません。 しかし、もし他の方法が使用可能であれば、この変数を OFF にすることで、プランナは明示的なソートを使わないように なります。)

ON

ソートの使用を有効にします。(デフォルトの設定です。)

OFF

ソートの使用を無効にします。

ENABLE_NESTLOOP

プランナが入れ子状ループ結合計画を使用することを有効、もしく は、無効にします。 (完全に入れ子状ループ結合を停止することはできません。 しかし、もし他の方法が使用可能であれば、この変数を OFF にする ことで、プランナはこの計画を使わないようになります。)

ON

入れ子状ループ結合の使用を有効にします。 (デフォルトの設定です。)

OFF

入れ子状ループ結合の使用を無効にします。

ENABLE_MERGEJOIN

プランナがマージ結合計画を使用することを有効、もしく は、無効にします。

ON

マージ結合の使用を有効にします。(デフォルトの設定です。)

OFF

マージ結合の使用を無効にします。

ENABLE_HASHJOIN

プランナがハッシュ結合計画を使用することを有効、もしく は、無効にします。

ON

ハッシュ結合の使用を有効にします。(デフォルトの設定です。)

OFF

ハッシュ結合の使用を無効にします。

GEQO

遺伝的最適化アルゴリズムの使用に関する閾値を設定します。

ON

文が 11 個以上のテーブルを持つ場合に遺伝的最適化アル ゴリズムを有効にします。 (これはデフォルトの設定です。)

ON=#

引数として整数 # をとり、 問い合わせ内に # 個以上 のテーブルを持つ文の場合、遺伝的最適化アルゴリズムを 有効にします。

OFF

遺伝的最適化アルゴリズムを無効にします。

問い合わせ最適化についてのより詳細については、プログラ マガイドの GEQO の章を参照して下さい。

libpq を使用したクライアントのフロントエンド環境で環境 変数 PGGEQO を設定していた場合、libpq はその接続開始時に GEQO を自動的に PGGEQO の値に設定します。

KSQO

キーセット問い合わせオプティマイザ に よって問い合わせプランナは、 ("WHERE (a=1 AND b=2) OR (a=2 AND b=3) ..." のような) WHERE 句に多くの AND 句を OR で結んだ形の句を持つ問い合わせを UNION 問い合わせに変換します。 この方法はデフォルトの実装よりも高速になりますが、UNION は、 同一の出力行を除くように暗黙的に SELECT DISTINCT 句を付け加 えるため、必ずしも全く同一な結果になりません。 KSQO は通常、MicroSoft Access の ような、このような形の問い合わせを生成する傾向がある製品を使 用する場合に使われます。

ON

この最適化を有効にします。

OFF

この最適化を無効にします。(デフォルトの設定です。)

DEFAULT

SET KSQO=OFF の指定と同一です。

KSQO アルゴリズムは、多くの OR で結ばれた AND 句を持つ問い 合わせでは必須なものでしたが、Postgres 7.0 以降では、標準の プランナでも十分にうまくこのような問い合わせを扱うことがで きます。

MAX_EXPR_DEPTH

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

integer

深さの最大値。

出力

SET VARIABLE

成功時に返されるメッセージ。

NOTICE: Bad value for variable (value)

指定した変数の設定に失敗した場合。

説明

SET はあるセッションにおける引数 variable の 設定パラメータを変更します。

現在の値は SHOW を使って入手でき、また、その値 は RESET を使ってデフォルト値に戻すことができ ます。 パラメータ名と値は大文字小文字を区別しません。 値のフィールドは常に文字列として指定する、つまり、単一引用符 で括られていることに注意して下さい。

SET TIME ZONE はそのセッションにおけるタイ ムゾーンのデフォルトオフセットを変更します。 1 つの SQL セッションは常に初期のデフォルトタイムゾーンオフ セットを持って始まります。 SET TIME ZONE 文は、現在の SQL セッション 用のタイムゾーンのデフォルトオフセットを変更することに使われ ます。

注意

SET variable 文は、Postgres の拡張言語です。

現在の値の表示 / リセットについては SHOW 及び RESET を参照して下さい。

使用法

日付の形式を 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

互換性

SQL92

SQL92 には、汎用的な SET variable はありません。 ( SET TRANSACTION ISOLATION LEVEL は除きます。) SQL92 における SET TIME ZONE の構文は少し異なっており、以下のように、タイムゾーンの指定には、 1 つの整数値のみが指定できます。

SET TIME ZONE { interval_value_expression | LOCAL }