.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "SET" "" "2003-08-02" "SQL - 言語" "SQL コマンド"
.SH NAME
SET \- 実行時パラメータの変更
.SH SYNOPSIS
.sp
.nf
SET [ SESSION | LOCAL ] \fIvariable\fR { TO | = } { \fIvalue\fR | '\fIvalue\fR' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { \fItimezone\fR | LOCAL | DEFAULT }
  
.sp
.fi
.SS "入力"
.PP
.TP
\fBSESSION\fR
現行セッションでコマンドを有効にすることを指定します。 (\fBSESSION\fR も \fBLOCAL\fR も指定されていない場合は、これがデフォルトです。)
.TP
\fBLOCAL\fR
現行のトランザクションでのみコマンドを有効にすることを指定します。 \fBCOMMIT\fR または \fBROLLBACK\fR の後、再びセッションレベルの設定が有効になります。 \fBSET LOCAL\fR は \fBBEGIN\fR ブロックの外側で実行されるとトランザクションは即座に終了するので、一見何も実行されていないように見えます。
.TP
\fB\fIvariable\fB\fR
設定可能な実行時パラメータです。
.TP
\fB\fIvalue\fB\fR
パラメータの新しい値です。パラメータをデフォルト値に再設定するために \fBDEFAULT\fR を使うことができます。文字列のリストを使うこともできますが、その要素が複雑な場合、単一又は二重引用符で囲う必要があります。
.PP
.SH "説明"
.PP
\fBSET\fR コマンドは実行時設定パラメータを変更します。 \fI管理者用ガイド\fRにリストされている実行時パラメータの多くは稼働中に \fBSET\fR コマンドで変更できます。 (しかし、変更するためにスーパーユーザ権限が必要な場合があります。また、サーバーあるいはセッションが始動した後には変更できないものもあります。) \fBSET\fR は現行セッションで使用される値のみに影響することに注意してください。
.PP
\fBSET\fR または \fBSET SESSION\fR が発行された後にトランザクションがアボートされると、\fBSET\fR コマンドの効力はそのトランザクションがロールバックされるときに失われます。 (この振る舞いは、PostgreSQL バージョン 7.3 での変更点です。7.3 より前のバージョンでは、後でエラーになっても \fBSET\fR の効果はロールバックしませんでした。) 一度トランザクションがコミットされるとその効果は、別の \fBSET\fR コマンドにオーバーライドされない限り、セッションが終了するまで持続します。
.PP
\fBSET LOCAL\fR の効果は、コミットの有無に関わらず現行のトランザクションが終了するまでしか持続しません。 1 つのトランザクション内で \fBSET\fR の後に \fBSET LOCAL\fR が続く場合は特別です。 トランザクションが終了するまでは \fBSET LOCAL\fR 値が有効ですが、その後 (トランザクションがコミットされると) \fBSET\fR 値が有効になります。
.PP
autocommit が off に設定されている場合でも、\fBSET\fR コマンドは新しいトランザクションブロックを開始しません。 詳細については、\fI管理者用ガイド\fRの autocommit に関する節を参照してください。
.PP
設定可能なパラメータの例をさらにいくつか紹介します。
.TP
\fBDATESTYLE\fR
日付/時間表示様式を選択します。 2 つの個別の設定が含まれます。デフォルトの日付/時間出力と不明瞭な入力の解釈です。

以下は日付/時間出力の様式です。
.RS
.TP
\fBISO\fR
ISO 8601 様式の日付と時間を使います。 (YYYY-MM-DD HH:MM:SS)。これがデフォルトです。
.TP
\fBSQL\fR
Oracle/Ingres 様式の日付と時間を使います。この様式は SQL (ISO 8601 様式を使っています)とは無関係で、このオプションの名前は歴史的偶然によってつけられました。
.TP
\fBPostgreSQL\fR
伝統的な PostgreSQL の形式を使います。
.TP
\fBGerman\fR
数値型の日付表示に dd.mm.yyyy を使います。
.RE
.PP

以下の二つのオプションは、``SQL'' のサブスタイルと ``PostgreSQL'' の出力フォーマット、そして不明瞭な日付入力の好ましい解釈を決定します。
.RS
.TP
\fBEuropean\fR
数値型の日付表示に dd/mm/yyyy を使います。
.TP
\fBNonEuropean\fR
.TP
\fBUS\fR
数値型の日付表示に mm/dd/yyyy を使います。
.RE
.PP

\fBSET DATESTYLE\fR の値は最初のリスト(出力様式)、もしくは二番目のリスト(サブスタイル)のどれか、もしくはそれぞれのカンマで区切られたもののどれかを使うことが可能です。

\fBSET DATESTYLE\fR は入力の解釈に影響を与えるコマンドで、これによりいくつかの標準出力形式が提供されます。 入力/出力に関してさまざまなオプションあるいは厳密な制御を必要とするアプリケーションでは、関数の \fBto_char\fR ファミリーの使用を検討してください。

データ形式の設定には、\fBSET\fR または設定ファイル項目を使用した通常の方法以外に、現在では使われていない古い方式もいくつかあります。

postmaster の環境変数 \fBPGDATESTYLE\fR を設定します。 (この方法は他のすべての方法によってオーバーライドされます)

日付を European 規定に設定するようにオプション \fB-o -e\fR を使って postmaster を起動します。 (この方法は環境変数および設定ファイル項目をオーバーライドします。)

クライアントの環境変数 \fBPGDATESTYLE\fR を設定します。 \fBlibpq\fR を基礎としたクライアントのフロントエンド環境に \fBPGDATESTYLE\fR が設定されている場合、\fBlibpq\fR は接続の開始中に DATESTYLE を \fBPGDATESTYLE\fR の値に自動的に設定します。 これは手動で \fBSET DATESTYLE\fR を発行するのと同じことです。
.TP
\fBNAMES\fR
\fBSET NAMES\fR は \fBSET CLIENT_ENCODING\fR の別名です。
.TP
\fBSEED\fR
乱数発生のための内部シードを設定します。
.RS
.TP
\fB\fIvalue\fB\fR
\fBrandom\fR 関数が使うシードの値です。 使用可能な値は 0 から 1 までの浮動小数点数で、この値はその後 231-1 で積算されます。
.RE
.PP

シードは \fBsetseed\fR SQL 関数を呼び出すことによっても設定できます。
.sp
.nf
SELECT setseed(\fIvalue\fR);
       
.sp
.fi
.TP
\fBSERVER_ENCODING\fR
サーバ側のマルチバイト符号化を示します。(符号化は \fBinitdb\fR 時に決定されるので、現在このパラメータは表示されますが設定はできません。)
.TP
\fBTIME ZONE\fR
.TP
\fBTIMEZONE\fR
セッションにおけるデフォルトのタイムゾーンを設定します。 引数は、SQL 時間間隔定数、整数または浮動小数精度の定数、ホストのオペレーティングシステムが認識するタイムゾーンを表す文字列のいずれかを指定することができます。

ここではタイムゾーン設定のいくつかの一般的な有効値を挙げます。
.RS
.TP
\fB\&'PST8PDT'\fR
タイムゾーンをカリフォルニア州バークレイに設定します。
.TP
\fB\&'Portugal'\fR
タイムゾーンをポルトガルに設定します。
.TP
\fB\&'Europe/Rome'\fR
タイムゾーンをイタリアに設定します。
.TP
\fB7\fR
GMTから西に7時間分ずらしたタイムゾーンに設定します。 (PDT と同じです。)
.TP
\fBINTERVAL '08:00' HOUR TO MINUTE\fR
GMTから西に8時間分ずらしたタイムゾーンに設定します。 (PST と同じです。)
.TP
\fBLOCAL\fR
.TP
\fBDEFAULT\fR
タイムゾーンをユーザのローカルタイムゾーン(使用しているオペレーティングシステムがデフォルトで設定されているもの) に設定します。
.RE
.PP

使用可能なタイムゾーン名は、オペレーティングシステムによって異なります。 例えば、Linux では \fI/usr/share/zoneinfo\fR がタイムゾーンのデータベースを持っています。このディレクトリ内のファイル名は、このコマンドのパラメータとして使用できます。

もし無効なタイムゾーンが指定されると、タイムゾーンは(ほとんどのシステムでいいかげんながらも)GMT に設定されます。

\fBlibpq\fR を基礎としたクライアントのフロントエンド環境に \fBPGTZ\fR 環境変数が設定されている場合、\fBlibpq\fR は接続の開始時に \fBSET TIMEZONE\fR を \fBPGTZ\fR の値に設定します。 
.PP
.PP
現在のパラメータの設定を表示するために SHOW [\fBshow\fR(l)] を使います。
.SH "診断"
.PP
.TP
\fBSET\fR
成功した時に返されるメッセージです。
.TP
\fBERROR: '\fIname\fB は有効なオプション名ではありません。\fR
設定しようとしたパラメータは存在しません。
.TP
\fBERROR: '」\fIname\fB':permission denied\fR
特定の設定を変更するにはスーパーユーザでなくてはなりません。
.TP
\fBERROR: '\fIname\fB' cannot be changed after server start\fR
サーバが起動されると、いくつかのパラメータが固定されます。
.PP
.SH "例"
.PP
日付の様式を伝統的 PostgreSQL の European 形式に設定します。
.sp
.nf
SET DATESTYLE TO PostgreSQL,European;
   
.sp
.fi
.PP
タイムゾーン名のスペルを大文字のままにするために引用符を使用して、カリフォルニア州バークレイのタイムゾーンを設定します (この例では PostgreSQL のデータ形式を使用しています)。 
.sp
.nf
SET TIME ZONE 'PST8PDT';
SELECT CURRENT_TIMESTAMP AS today;
               today
------------------------------------
 Tue Feb 26 07:32:21.42834 2002 PST
   
.sp
.fi
.PP
タイムゾーンをイタリアに設定します (特別な文字を扱うために単一引用符が必要であることに注意して下さい)。
.sp
.nf
SET TIME ZONE 'Europe/Rome';
SELECT CURRENT_TIMESTAMP AS today;

             today
-------------------------------
 2002-10-08 05:39:35.008271+02
   
.sp
.fi
.SH "互換性"
.SS "SQL92"
.PP
SET TIME ZONE は、SQL9x で定義されている構文を拡張したものです。 SQL9x では、数値のタイムゾーンオフセットしか使用できないのに対し、PostgreSQL では、タイムゾーンのすべての指定子文字列を使用することができます。 他のすべての SET 機能は PostgreSQL の拡張です。
.SH "関連項目"
.PP
関数 \fBset_config\fR でも同等の機能を提供しています。 \fIPostgreSQL ユーザガイド\fRの\fIその他の関数\fRの節を参照してください。
