無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

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までの浮動小数点数を値として設定できます。その後、この値には2 31 -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.26 を参照してください。 また、 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

powered by SEO.CUG.NET