PostgreSQL 9.0.0文書
前のページ | 巻戻し |  | 早送り | 次のページ

# SET

## 名前

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

## 概要

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

## 説明

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

`SET`(または同等の`SET SESSION`)が発行された後にトランザクションがアボートされると、トランザクションがロールバックした時点で`SET`コマンドの効力は失われます。 一度トランザクションがコミットされると、別の`SET`コマンドで上書きされない限り、セッションが終了するまでその効果が持続します。

`SET LOCAL`の効果は、コミットの有無にかかわらず現在のトランザクションが終了するまでしか持続しません。 1つのトランザクション内で`SET`の後に`SET LOCAL`が続く特殊な例を考えてみましょう。 この場合、トランザクションが終了するまでは`SET LOCAL`値が有効ですが、その後（トランザクションがコミットされると）`SET`値が有効になります。

`SET`もしくは`SET LOCAL`の効果は、このコマンドより以前のセーブポイントまでロールバックすると取り消されます。

`SET LOCAL`を同じ変数に対する`SET`オプション（CREATE FUNCTIONを参照）を持つ関数内で使用する場合、`SET LOCAL`コマンドの効果は関数終了時に消滅します。 つまり、関数が呼び出された時に有効だった値にとにかく戻されます。 これにより`SET LOCAL`は、呼び出し元の値を保管し元に戻すという`SET`オプションを使用する利点を持ちつつ、関数内で動的または繰り返し変更されるパラメータ用に使用できます。 しかし、通常の`SET`コマンドでは下位の関数の`SET`オプションを上書きしてしまい、その効果はロールバックしない限り永続します。

> 注意: PostgreSQLバージョン8.0から8.2まででは、`SET LOCAL`の効果は、より以前のセーブポイントを解放すること、または、PL/pgSQL例外ブロックから正常終了することで取り消されました。 直観的ではないようですので、この動作は変更されました。

## パラメータ

`SESSION`

  コマンドの有効範囲が現行セッションであることを指定します （`SESSION`も`LOCAL`も指定されていない場合は、これがデフォルトです）。

`LOCAL`

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

`configuration_parameter`

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

`value`

  パラメータの新しい値です。 値として、対象のパラメータで適切となるように、文字列定数、識別子、数字、あるいはこれらをカンマで区切ったリストを指定することができます。 `DEFAULT`と記述することで、パラメータをデフォルト値（つまり、現在のセッションで`SET`が実行されなかった時に設定される値）に再設定することができます。

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

`SCHEMA`

  `SET SCHEMA '`value`'`は`SET search_path TO `value``の別名です。 この構文を使用する場合は1つのスキーマのみを指定することができます。

`NAMES`

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

`SEED`

  乱数ジェネレータ（`random`関数）用の内部シードを設定します。 -1から1までの浮動小数点数を値として設定できます。その後、この値には231-1がかけられます。

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

      SELECT setseed(value);

`TIME ZONE`

  `SET TIME ZONE `value``は`SET 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`

    時間帯をユーザのローカルな時間帯（サーバのデフォルトの`timezone`値。これが明示的な設定がされていない場合はサーバのオペレーティングシステムのデフォルトの時間帯になります。）に設定します。

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

## 注釈

`set_config`関数は等価な機能を提供します。 項9.24を参照してください。 また、`pg_settings`システムビューを更新することで、`SET`と同じことを実行することができます。

## 例

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

    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

前のページ | ホーム | 次のページ
SELECT INTO | 上に戻る | SET CONSTRAINTS