SET

名前

SET -- 実行時パラメータの変更

概要

SET [ SESSION | LOCAL ] name { TO | = } { value | 'value' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }

説明

SET コマンドは実行時設定パラメータを変更します。 項16.4にリストされている実行時パラメータの多くは稼働中に SET コマンドで変更できます。 (しかし、変更するためにスーパーユーザ権限が必要な場合があります。また、サーバーあるいはセッションが始動した後には変更できないものもあります。) SET は現行セッションで使用される値のみに影響することに注意してください。

SET または SET SESSION が発行された後にトランザクションがアボートされると、SET コマンドの効力はそのトランザクションがロールバックされるときに失われます。 (この振る舞いは、PostgreSQL バージョン 7.3 での変更点です。7.3 より前のバージョンでは、後でエラーになっても SET の効果はロールバックしませんでした。) 一度トランザクションがコミットされるとその効果は、別の SET コマンドにオーバーライドされない限り、セッションが終了するまで持続します。

SET LOCAL の効果は、コミットの有無に関わらず現在のトランザクションが終了するまでしか持続しません。 1 つのトランザクション内で SET の後に SET LOCAL が続く場合は特別です。 トランザクションが終了するまでは SET LOCAL 値が有効ですが、その後 (トランザクションがコミットされると) SET 値が有効になります。

パラメータ

SESSION

現行セッションでコマンドを有効にすることを指定します。 (SESSIONLOCAL も指定されていない場合は、これがデフォルトです。)

LOCAL

現行のトランザクションでのみコマンドを有効にすることを指定します。 COMMIT または ROLLBACK の後、再びセッションレベルの設定が有効になります。 SET LOCALBEGIN ブロックの外側で実行されるとトランザクションは即座に終了するので、一見何も実行されていないように見えます。

name

設定可能な実行時パラメータ名です。 利用可能なパラメータは、項16.4 と以下に示されています。

value

パラメータの新しい値です。 値は、定数、識別子、数字、あるいは、これらをコンマで区切ったリストを文字列として指定することができます。 パラメータをデフォルト値に再設定するために DEFAULT を使うことができます。

項16.4 に記載された設定パラメータの他にも、SET コマンドを使用して調整するしかないものや特殊な構文を持つものが数個あります。

NAMES

SET NAMES value は、SET client_encoding TO valueの別名です。

SEED

乱数生成器(random関数)用の内部シードを設定します。 0から1までの浮動小数点数を値として設定でき、その後、231-1で積算されます。

シードはsetseed関数を呼び出すことでも設定可能です。

SELECT setseed(value);

TIME ZONE

SET TIME ZONE valueSET timezone TO valueの別名です。 SET TIME ZONE構文では、タイムゾーンの指定に特殊な構文を使用できます。 有効な値の例を以下に示します(しかし、これらの中には特定のプラットホームでのみ設定可能なものがあることに注意してください)。

'PST8PDT'

カリフォルニア州バークレイ用のタイムゾーンです。

'Portugal'

ポルトガル用のタイムゾーンです。

'Europe/Rome'

イタリア用のタイムゾーンです。

-7

UTCから西に7時間分ずらしたタイムゾーンです(PDTと同じです)。 正の値はUTCから東方向であることを表します。

INTERVAL '-08:00' HOUR TO MINUTE

UTCから西に8時間分ずらしたタイムゾーンです(PSTと同じです)。

LOCAL
DEFAULT

タイムゾーンをユーザのローカルタイムゾーン(サーバのオペレーティングシステムのデフォルトで設定されているもの) に設定します。

タイムゾーンに関する詳細は項8.5を参照してください。

注釈

set_config関数は等価な機能を提供します。 項9.13 を参照してください。

スキーマの検索パスを設定します。

SET search_path TO my_schema, public;

日付の様式を、入力方式を"day before month"とした伝統的 POSTGRES に設定します。

SET datestyle TO postgres, dmy;

タイムゾーン名のスペルを大文字のままにするために引用符を使用して、カリフォルニア州バークレイのタイムゾーンを設定します。

SET TIME ZONE 'PST8PDT';
SELECT current_timestamp AS today;

             today
-------------------------------
 2003-04-29 15:02:01.218622-07

互換性

SET TIME ZONE は標準SQLで定義された構文を拡張したものです。 標準では数値のタイムゾーンオフセットしか使用できないのに対し、PostgreSQL では、より柔軟にタイムゾーンを指定することができます。 他のすべての SET の持つ機能は、PostgreSQL の拡張です。

関連項目

RESET, SHOW