| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
本章從管理員的角度描述可用的區域特性. PostgreSQL 通過三種途徑支持區域:
利用操作系統庫的區域(locale)特性,提供對集合順序,數字格式, 翻譯過的信息,和其它方面的支持.
提供一些定義在 PostgreSQL 服務器裡的 不同的節字符集,包括多字節字符集,以支持多種類型的語言的排序文本, 以及提供客戶端和服務器端之間的字符集記錄。
單字節字符記錄為多字節和單字節字符集的用戶提供了一種更 輕量級的解決方法.
區域支持指的是應用中考慮字母,排序,數字格式化 等與文化相關的問題. PostgreSQL 使用服務器操作系統提供的標準 ISO C 和POSIX的區域機制. 更多的信息請參考你的系統的文檔.
區域支持是 在使用 initdb 創建一個數據庫集群的時候自動初始化的. initdb 將會按照它的執行環境的區域設置初始化 數據庫集群;因此如果你的系統已經設置為你的數據庫集群想要的區域, 那麼你就沒有什麼可幹的.如果你想使用其它的區域(或者你還不知道 你的系統設置的區域是什麼),那麼你可以用 --locale 告訴 initdb 你需要的區域究竟是哪個. 比如︰
initdb --locale=sv_SE
這個例子就把區域設置為瑞典(sv),用瑞典語說話 (SE).其他的可能性是 en_US(美國英語)和 fr_CA (加拿大法語). 如果有多于一種字符集可以用于區域,那麼聲明看起來象下面這樣: cs_CZ.ISO8859-2.你的系統裡有哪些可用的區域設置,它們的名字 是什麼,這些信息都取決于你的操作系統提供商提供了什麼 以及你安裝了什麼東西.
有時候,把幾種區域規則混合起來也很有用,比如,使用英語字符規則 而用西班牙語信息.為了支持這些,我們有一套區域子範疇用于控制區域規則 的某一方面.
| LC_COLLATE | 字符串排序順序 |
| LC_CTYPE | 字符分類(什麼是字母?什麼是這個字母的等效大寫?) |
| LC_MESSAGES | 信息的語言 |
| LC_MONETARY | 貨幣金額的格式 |
| LC_NUMERIC | 數字的格式 |
| LC_TIME | 日期和時間的格式 |
如果你想要你的系統表現得象沒有區域支持,那麼使用特殊的區域 C 或 POSIX.
一些區域範疇的性質是它們的值必需在數據庫集群的生命期內固定. 也就是說,一旦運行了 initdb,你就再也不能 更改它們了.LC_COLLATE 和 LC_CTYPE 就是這樣的範疇.它們影響索引的排序順序,因此它們必需保持固定, 否則在文本字段上的索引將會崩潰.PostgreSQL 通過記錄 initdb 看到的 LC_COLLATE 和 LC_CTYPE 來強迫這一點. 服務器在啟動的時候自動使用這兩個數值.
其它區域範疇可以在服務器啟動的時候根據需要設置運行時配置變量 來改變(參閱 Section 16.4 獲取細節). initdb 選擇的缺省值實際上只是做為服務器 運行缺省寫入配置文件 postgresql.conf. 如果你在 postgresql.conf 裡面刪除了 相應的賦值,那麼服務器將會繼承來自運行環境的設置.
請注意服務器的區域行為是由它看到的環境變量決定的,而不是由任何客戶端 的環境變量影響的.因此,我們要在啟動服務器之前認真地設置好這些變量. 這樣帶來的一種情況是如果客戶端和服務器設置成不同的區域, 那麼消息可能以不同的語言呈現,實際情況取決于它們的源是什麼.
注意: 在我們談到從執行環境繼承區域的時候,我們的意思是在大多數操作系統上的 下列動作︰對于一個給定的區域範疇,比如字符集,按照下面的順序評估 這些環境變量,直到找到一個設置了的︰LC_ALL, LC_COLLATE(變量對應相應的範疇), LANG.如果這些環境變量一個都沒有設置,那麼 區域缺省為 C.
一些信息區域化庫也使用環境變量 LANGUAGE, 它覆蓋所有其它用于設置語言信息的區域設置.如果有問題, 請參考你的操作系統的文檔,特別是 gettext 的文檔 獲取更多信息.
要打開用戶選擇的信息翻譯,制作時必需打開 NLS 選項.這個選項獨立于其它區域支持.
區域支持特別影響下面的特性:
PostgreSQL 裡區域支持的唯一的嚴重缺點是速度.因此 只有你需要的時候才使用它. 同時我們還要特別指出的是選擇一個非 C 區域設置將關閉為 LIKE 和 ~ 操作符設置的索引優化, 這樣對那些使用這些操作符的搜索可能有巨大的性能影響.
如果經過上面解釋後區域支持仍然不能運轉,那你就要檢查一下看看 你的操作系統的區域支持是否正確配置. 要檢查某個區域是否安裝並且正常運轉,你可以使用象命令 locale -a。 (如果你的系統提供了該命令)。
請檢查核實 PostgreSQL 確實使用了你認為它該用的 區域設置.LC_COLLATE 和 LC_CTYPE 設置都是 在 initdb 的時候決定的,如果不重復 initdb 是不可能改變的.其它的區域設置包括 LC_MESSAGES 和 LC_MONETARY 都是由服務器啟動的環境決定的, 可以通過簡單地重啟來修改.你可以用 contrib/pg_controldata 工具程序 檢查數據庫的 LC_COLLATE 和 LC_CTYPE 的設置.
目錄 src/test/locale 包含 PostgreSQL 的區域支持的測試套件.
那些通過分析錯誤信息處理服務器端錯誤的客戶端應用很明顯 會有問題,因為服務器來的信息可能會是以不同語言表示的. 我們建議這類應用的開發人員改用錯誤代碼機制。
維護信息翻譯表需要許多志願者的堅持不懈的努力, 他們就是希望 PostgreSQL 以它們的語言說話的人. 如果你的語言的信息目前還不可用或者沒有完全翻譯完成, 那麼我們很歡迎你的協助.如果你想幫忙,那麼請參考 Chapter 46 或者向開發者郵遞列表發郵件.