時間帯省略形は十分に標準化されていませんので、PostgreSQLでは、サーバで受付け可能な省略形群をカスタマイズできる仕組みを提供します。
timezone_abbreviations実行時パラメータは有効な省略形群を決定します。
このパラメータはすべてのデータベースユーザで変更可能ですが、取り得る値はデータベース管理者により制御されます。
これらは実際にはインストレーションディレクトリの.../share/timezonesets/
内の設定ファイル名です。
代替ファイルをこのディレクトリに追加することにより、管理者は時間帯省略形に対するローカルポリシーを設定することができます。
timezone_abbreviations
は、 .../share/timezonesets/
に存在する、名前のすべてがアルファベットである任意のファイルの名前を指定することができます。
(timezone_abbreviations
内の非アルファベット文字の禁止により、意図したディレクトリ以外のファイル読み取りを防ぐことができます。
また、バックアップファイルやその他のファイルの読み取りを防ぐこともできます。)
時間帯省略形ファイルには空白行や#
から始まるコメントを含めることができます。
コメント以外は以下の書式を持たなければなりません。
zone_abbreviation
offset
zone_abbreviation
offset
Dzone_abbreviation
time_zone_name
@INCLUDEfile_name
@OVERRIDE
zone_abbreviation
は単なる定義された省略形です。
offset
はUTCからの相当するオフセットを秒数で表した整数です。
グリニッジより東にあれば正、西にあれば負の値となります。
たとえば、-18000はグリニッジより西に5時間、すなわち、北アメリカ東海岸の標準時間を示します。
D
は、時間帯名が標準時間ではなくローカル時間での夏時間を表すことを示します。
あるいは、IANA時間帯データベースで定義されている地域名を参照するtime_zone_name
を指定することもできます。
地域の定義はその地域の省略形が存在するか、もしくは、使われてきたかを確認し、もしそうであれば、適切な意味として使われます。
適切な意味とは、確定した値を持つタイムスタンプが使われている意味、その当時は使われていなかったかもしれないが、後に即座に使われる意味、もしくは、その時の後にのみ使われる最も古い意味です。
この挙動は歴史的に変化した意味を持つ省略形を扱う際には不可欠です。
また、省略形が現れない地域名に関して省略形を定義することもできます。
この省略形を使うことは地域名を書き出すことと全く同じです。
タイムゾーンの定義の参照が必要になる過程よりはるかに安価であるため、UTCからのオフセットが今までに一度も変わっていない省略形を扱う場合は、単純な整数型のoffset
を使う方が好ましいでしょう。
@INCLUDE
構文により、.../share/timezonesets/
ディレクトリ内の他のファイルを含有することができます。
深さに制限がありますが、入れ子に含有することができます。
@OVERRIDE
構文は、ファイル内の続く項目が既存の項目(典型的には、インクルードされたファイルから得られた項目)を上書きできることを示します。
これがないと、同一時間帯省略形の定義が競合した場合にエラーとみなされます。
未変更のインストレーションでは、Default
ファイルに、ほとんど全世界の競合しない時間帯省略形をすべて記載しています。
さらにAustralia
およびIndia
ファイルがこれらの地区向けに提供されています。
これらのファイルはDefault
ファイルの先頭で含有されています。
必要に応じて省略形の追加・変更を行ってください。
参考のため、標準のインストレーションにはAfrica.txt
、America.txt
なども含まれています。
これらにはIANA時間帯データベースに従って使用されている時間帯省略形に関する情報がすべて含まれています。
これらのファイル内にある時間帯定義を必要に応じてコピーペーストして独自の設定ファイルを編集することができます。
これらのファイル名にドットが入っていますので、timezone_abbreviations
設定から直接参照できないことに注意してください。
時間帯省略形を読み込む時にエラーが発生した場合、新しい値は適用されず、古い値がそのまま残ります。 データベースの起動時にエラーが起きた場合は、起動に失敗します。
設定ファイル内で定義される時間帯省略形は、PostgreSQLに組み込み済みの時間帯以外の意味も変更します。
たとえば、Australia
設定ファイルではSAT
(南オーストラリア標準時間)を定義しています。
このファイルが有効な場合、SAT
は土曜の省略形として認識されなくなります。
.../share/timezonesets/
を変更する時にバックアップを責任を持って行ってください。
このディレクトリは通常のデータベースダンプに含まれません。