SET

名前

SET -- 実行時パラメータを変更する

概要

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

説明

SETコマンドは実行時設定パラメータを変更します。 第17章に列挙されている実行時パラメータの多くは稼働中に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ブロックの外側で実行すると、トランザクションが即座に終了するため、一見何も実行されていないように見えます。

configuration_parameter

設定可能な実行時パラメータ名です。 利用可能なパラメータは、第17章と以下に示します。

value

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

第17章に記載された設定パラメータの他にも、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'

カリフォルニア州バークレイ用の時間帯です。

'Europe/Rome'

イタリア用の時間帯です。

-7

UTCから西に7時間分ずらした時間帯です(PDTと同じです)。 正の値はUTCから東方向です。

INTERVAL '-08:00' HOUR TO MINUTE

UTCから西に8時間分ずらした時間帯です(PSTと同じです)。

LOCAL
DEFAULT

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

時間帯に関する詳細は項8.5.3を参照してください。

注釈

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

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

SET search_path TO my_schema, public;

日付のスタイルを、"day before month"の伝統的なPOSTGRES入力方式に設定します。

SET datestyle TO postgres, dmy;

時間帯をカリフォルニア州バークレイに設定します。

SET TIME ZONE 'PST8PDT';

時間帯をイタリアに設定します。

SET TIME ZONE 'Europe/Rome';

互換性

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

関連項目

RESET, SHOW