SET [ SESSION | LOCAL ] variable { TO | = } { value | 'value' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }
現行セッションでコマンドを有効にすることを指定します。 (SESSION も LOCAL も指定されていない場合は、これがデフォルトです。)
現行のトランザクションでのみコマンドを有効にすることを指定します。 COMMIT または ROLLBACK の後、再びセッションレベルの設定が有効になります。 SET LOCAL は BEGIN ブロックの外側で実行されるとトランザクションは即座に終了するので、一見何も実行されていないように見えます。
設定可能な実行時パラメータです。
パラメータの新しい値です。パラメータをデフォルト値に再設定するために DEFAULT を使うことができます。文字列のリストを使うこともできますが、その要素が複雑な場合、単一又は二重引用符で囲う必要があります。
SET コマンドは実行時設定パラメータを変更します。 管理者用ガイドにリストされている実行時パラメータの多くは稼働中に SET コマンドで変更できます。 (しかし、変更するためにスーパーユーザ権限が必要な場合があります。また、サーバーあるいはセッションが始動した後には変更できないものもあります。) SET は現行セッションで使用される値のみに影響することに注意してください。
SET または SET SESSION が発行された後にトランザクションがアボートされると、SET コマンドの効力はそのトランザクションがロールバックされるときに失われます。 (この振る舞いは、PostgreSQL バージョン 7.3 での変更点です。7.3 より前のバージョンでは、後でエラーになっても SET の効果はロールバックしませんでした。) 一度トランザクションがコミットされるとその効果は、別の SET コマンドにオーバーライドされない限り、セッションが終了するまで持続します。
SET LOCAL の効果は、コミットの有無に関わらず現行のトランザクションが終了するまでしか持続しません。 1 つのトランザクション内で SET の後に SET LOCAL が続く場合は特別です。 トランザクションが終了するまでは SET LOCAL 値が有効ですが、その後 (トランザクションがコミットされると) SET 値が有効になります。
autocommit が off に設定されている場合でも、SET コマンドは新しいトランザクションブロックを開始しません。 詳細については、管理者用ガイドの autocommit に関する節を参照してください。
設定可能なパラメータの例をさらにいくつか紹介します。
日付/時間表示様式を選択します。 2 つの個別の設定が含まれます。デフォルトの日付/時間出力と不明瞭な入力の解釈です。
以下は日付/時間出力の様式です。
ISO 8601 様式の日付と時間を使います。 (YYYY-MM-DD HH:MM:SS)。これがデフォルトです。
Oracle/Ingres 様式の日付と時間を使います。この様式は SQL (ISO 8601 様式を使っています)とは無関係で、このオプションの名前は歴史的偶然によってつけられました。
伝統的な PostgreSQL の形式を使います。
数値型の日付表示に dd.mm.yyyy を使います。
以下の二つのオプションは、"SQL" のサブスタイルと "PostgreSQL" の出力フォーマット、そして不明瞭な日付入力の好ましい解釈を決定します。
数値型の日付表示に dd/mm/yyyy を使います。
数値型の日付表示に mm/dd/yyyy を使います。
SET DATESTYLE の値は最初のリスト(出力様式)、もしくは二番目のリスト(サブスタイル)のどれか、もしくはそれぞれのカンマで区切られたもののどれかを使うことが可能です。
SET DATESTYLE は入力の解釈に影響を与えるコマンドで、これによりいくつかの標準出力形式が提供されます。 入力/出力に関してさまざまなオプションあるいは厳密な制御を必要とするアプリケーションでは、関数の to_char ファミリーの使用を検討してください。
データ形式の設定には、SET または設定ファイル項目を使用した通常の方法以外に、現在では使われていない古い方式もいくつかあります。
postmaster の環境変数 PGDATESTYLE を設定します。 (この方法は他のすべての方法によってオーバーライドされます) |
日付を European 規定に設定するようにオプション -o -e を使って postmaster を起動します。 (この方法は環境変数および設定ファイル項目をオーバーライドします。) |
クライアントの環境変数 PGDATESTYLE を設定します。 libpq を基礎としたクライアントのフロントエンド環境に PGDATESTYLE が設定されている場合、libpq は接続の開始中に DATESTYLE を PGDATESTYLE の値に自動的に設定します。 これは手動で SET DATESTYLE を発行するのと同じことです。 |
SET NAMES は SET CLIENT_ENCODING の別名です。
乱数発生のための内部シードを設定します。
random 関数が使うシードの値です。 使用可能な値は 0 から 1 までの浮動小数点数で、この値はその後 231-1 で積算されます。
シードは setseed SQL 関数を呼び出すことによっても設定できます。
SELECT setseed(value);
サーバ側のマルチバイト符号化を示します。(符号化は initdb 時に決定されるので、現在このパラメータは表示されますが設定はできません。)
セッションにおけるデフォルトのタイムゾーンを設定します。 引数は、SQL 時間間隔定数、整数または浮動小数精度の定数、ホストのオペレーティングシステムが認識するタイムゾーンを表す文字列のいずれかを指定することができます。
ここではタイムゾーン設定のいくつかの一般的な有効値を挙げます。
タイムゾーンをカリフォルニア州バークレイに設定します。
タイムゾーンをポルトガルに設定します。
タイムゾーンをイタリアに設定します。
GMTから西に7時間分ずらしたタイムゾーンに設定します。 (PDT と同じです。)
GMTから西に8時間分ずらしたタイムゾーンに設定します。 (PST と同じです。)
タイムゾーンをユーザのローカルタイムゾーン(使用しているオペレーティングシステムがデフォルトで設定されているもの) に設定します。
使用可能なタイムゾーン名は、オペレーティングシステムによって異なります。 例えば、Linux では /usr/share/zoneinfo がタイムゾーンのデータベースを持っています。このディレクトリ内のファイル名は、このコマンドのパラメータとして使用できます。
もし無効なタイムゾーンが指定されると、タイムゾーンは(ほとんどのシステムでいいかげんながらも)GMT に設定されます。
libpq を基礎としたクライアントのフロントエンド環境に PGTZ 環境変数が設定されている場合、libpq は接続の開始時に SET TIMEZONE を PGTZ の値に設定します。
現在のパラメータの設定を表示するために SHOW を使います。
成功した時に返されるメッセージです。
設定しようとしたパラメータは存在しません。
特定の設定を変更するにはスーパーユーザでなくてはなりません。
サーバが起動されると、いくつかのパラメータが固定されます。
日付の様式を伝統的 PostgreSQL の European 形式に設定します。
SET DATESTYLE TO PostgreSQL,European;
タイムゾーン名のスペルを大文字のままにするために引用符を使用して、カリフォルニア州バークレイのタイムゾーンを設定します (この例では PostgreSQL のデータ形式を使用しています)。
SET TIME ZONE 'PST8PDT'; SELECT CURRENT_TIMESTAMP AS today; today ------------------------------------ Tue Feb 26 07:32:21.42834 2002 PST
タイムゾーンをイタリアに設定します (特別な文字を扱うために単一引用符が必要であることに注意して下さい)。
SET TIME ZONE 'Europe/Rome'; SELECT CURRENT_TIMESTAMP AS today; today ------------------------------- 2002-10-08 05:39:35.008271+02