SET

Name

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

Synopsis

SET variable { TO | = } { 'value' | DEFAULT }
SET TIME ZONE { 'timezone' | LOCAL | DEFAULT }
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZED }
  

入力

variable

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

value

パラメータに設定する値。

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

CLIENT_ENCODING | NAMES

クライアント側のマルチバイト・コーディング方式を設定する。 値として以下のものがあります。

value

クライアント側のマルチバイト・コーディング方式をこの value に設定 します。指定するコーディング方式はバックエンドでサポートさ れたものでなければいけません。

DEFAULT

クライアント側マルチバイト・コーディング方式をデフォルト値 に設定します。

このパラメータは、configure 時にマルチバイト機能を指定していた 場合にのみ使用できます。

DateStyle

日付/時刻の表現形式を設定します。出力の書式に影響を与え、また、 入力の解釈にも影響を与えることもあります。

ISO

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

SQL

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

Postgres

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

European

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

NonEuropean

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

German

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

US

'NonEuropean' と同一です。

default

デフォルト値( US,Postgres )に戻します。

日付形式は以下によって初期化されます。

環境変数 PGDATESTYLE の設定。
日付を -o -e オプションで European 規定に設定して 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

SERVER_ENCODING

サーバ側のマルチバイト・コーディング方式を設定します。

サーバ側のマルチバイト・コーディング方式を設定します。

DEFAULT

サーバ側のマルチバイト・コーディング方式を設定します。 (訳注: サーバ側マルチバイト・コーディング方式をデフォルト 値に設定します。の間違いと思われます。)

このパラメータは、configure 時にマルチバイト機能を指定していた場 合にのみ使用できます。

TIMEZONE

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

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

'PST8PDT'

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

'Portugal'

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

'Europe/Rome'

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

DEFAULT

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

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

libpq を使ったフロントエンドでは、環境変数 PGTZ の設定によって 初期化できます。

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

TRANSACTION ISOLATION LEVEL

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

READ COMMITTED

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

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

SERIALIZABLE

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

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

COST_HEAP

オブティマイザで使われるヒープスキャンのコストのデフォルト値を 設定します。

float4

ヒープスキャンのコストを指定された浮動小数点値に設定します。

DEFAULT

ヒープスキャンのコストにデフォルト値を設定します。

フロントエンドは、環境変数 PGCOSTHEAP を設定することでも初期化で きます。

COST_INDEX

オプティマイザで使われるインデックススキャンのデフォルト・コスト を設定します。

float4

インデックススキャンのコストを指定された浮動小数点値に設定します。

DEFAULT

インデックススキャンのコストをデフォルト値に設定します。

フロントエンドは、環境変数 PGCOSTINDEX を設定することでも初期化 できます。

GEQO

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

ON

6 個以上のテーブルを持つ文では、遺伝的最適化アルゴリズムが 有効になります。

ON=#

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

OFF

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

DEFAULT

SET GEQO='ON' の指定と同一です。

このアルゴリズムはデフォルトで有効で、11 個以上のテーブルを持つ 文に GEQO が使われます。(より詳しくは、プログラマガイドの GEQO の章を参照して下さい。)

フロントエンドでは、環境変数 PGGEQO を設定することでも初期化するこ とができます

大規模な(複数)リレーションと小規模な(複数)リレーションを結 合する際に有益です。このアルゴリズムはデフォルトで無効です。 GEQO を全く使用しません。 (訳注: この段落は単なる間違いと思われます。)

KSQO

キーセット・クエリオブティマイザは、問い 合わせオブティマイザを強制的に、 MicroSoft Access で生成されるような OR 句の繰り返しに最適化します。

ON

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

OFF

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

DEFAULT

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

大規模な(複数)リレーションと小規模な(複数)リレーションを結 合する際に有益です。このアルゴリズムはデフォルトで無効です。 GEQO を全く使用しません。 (訳注: この段落は単なる間違いと思われます。)

フロントエンドでは、環境変数 PGKSQO を設定することでも初期化する ことができます

出力

SET VARIABLE

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

WARN: Bad value for variable (value)

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

説明

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

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

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

注意

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

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

使用法

日付の形式を ISO に設定します。

   SET DATESTYLE TO 'ISO';
   
4 個以上のテーブルを持つ問い合わせに対して GEQO を有効にします。
 
   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 }