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もLOCALも指定されていない場合は、これがデフォルトです。)
現行のトランザクションでのみコマンドを有効にすることを指定します。 COMMITまたはROLLBACKの後、再びセッションレベルの設定が有効になります。 SET LOCALはBEGINブロックの外側で実行されるとトランザクションは即座に終了するので、一見何も実行されていないように見えます。
設定可能な実行時パラメータ名です。 利用可能なパラメータは、項16.4と以下に示されています。
パラメータの新しい値です。 値は、定数、識別子、数字、あるいは、これらをコンマで区切ったリストを文字列として指定することができます。 パラメータをデフォルト値に再設定するためにDEFAULTを使うことができます。
項16.4に記載された設定パラメータの他にも、SETコマンドを使用して調整するしかないものや特殊な構文を持つものが数個あります。
SET NAMES valueは、SET client_encoding TO valueの別名です。
乱数生成器(random関数)用の内部シードを設定します。 0から1までの浮動小数点数を値として設定でき、その後、231-1で積算されます。
シードはsetseed関数を呼び出すことでも設定可能です。
SELECT setseed(value);
SET TIME ZONE valueはSET timezone TO valueの別名です。 SET TIME ZONE構文では、時間帯の指定に特殊な構文を使用できます。 有効な値の例を以下に示します。
カリフォルニア州バークレイ用の時間帯です。
イタリア用の時間帯です。
UTCから西に7時間分ずらした時間帯です(PDTと同じです)。 正の値はUTCから東方向であることを表します。
UTCから西に8時間分ずらした時間帯です(PSTと同じです)。
時間帯をユーザのローカルな時間帯(サーバのオペレーティングシステムのデフォルトで設定されているもの)に設定します。
スキーマの検索パスを設定します。
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';