《PostgreSQL Conference Japan 2018》   他のバージョンの文書10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

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'

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

'Europe/Rome'

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

-7

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

INTERVAL '-08:00' HOUR TO MINUTE

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

LOCAL
DEFAULT

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

時間帯に関する詳細は項8.5を参照してください。 また、付録Bには認識可能な時間帯名の一覧があります。

注釈

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