由於時區縮寫並未良好標準化,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 將是格林威治以西五小時,或北美東海岸標準時間。 D
表示時區名稱表示當地日光節約時間,而不是標準時間。
或者,可以給出 time_zone_name
,引用 IANA 時區資料庫中定義的時區名稱。 查詢該時區的定義以查看該縮寫是否在該時區中使用過,如果是,則使用適當的含義 — 也就是說,確定其值之時間戳記當前使用的含義,如果當時未使用,則使用緊接在該時間之前的含義,如果僅在該時間之後使用,則使用最舊的含義。 這種行為對於處理歷史上含義各異的縮寫至關重要。 也允許根據該縮寫未出現的時區名稱來定義縮寫; 然後使用該縮寫等同於寫出時區名稱。
當定義與 UTC 的偏移量從未改變過的縮寫時,首選使用簡單的整數 offset
,因為處理這些縮寫比那些需要查詢時區定義的縮寫便宜得多。
@INCLUDE
語法允許包含 .../share/timezonesets/
目錄中的另一個檔案。 包含可以巢狀,達到有限的深度。
@OVERRIDE
語法表示檔案中後續的條目可以覆蓋先前的條目(通常是從包含的檔案中獲得的條目)。 如果沒有這個,相同時區縮寫的衝突定義會被認為是錯誤。
在未修改的安裝中,檔案 Default
包含世界上大多數地區的所有非衝突時區縮寫。 為這些區域提供了額外的檔案 Australia
和 India
:這些檔案首先包含 Default
檔案,然後根據需要新增或修改縮寫。
出於參考目的,標準安裝還包含檔案 Africa.txt
、America.txt
等,其中包含有關根據 IANA 時區資料庫已知使用的每個時區縮寫的資訊。 可以在需要時將這些檔案中找到的時區名稱定義複製並貼到自訂組態檔案中。 請注意,由於名稱中嵌入了點,因此無法將這些檔案直接引用為 timezone_abbreviations
設定。
如果在讀取時區縮寫集時發生錯誤,則不會套用新值,並且會保留舊集。 如果在啟動資料庫時發生錯誤,則啟動失敗。
在組態檔案中定義的時區縮寫會覆蓋內建於 PostgreSQL 中的非時區含義。 例如,Australia
組態檔案定義了 SAT
(代表 South Australian Standard Time,南澳洲標準時間)。 當此檔案處於活動狀態時,SAT
將不會被識別為星期六的縮寫。
如果您修改 .../share/timezonesets/
中的檔案,則由您負責進行備份 — 一般資料庫轉儲不包含此目錄。
如果您在文件中發現任何不正確、與您使用特定功能時的經驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。