CREATE COLLATION — 定義一個新的排序規則
CREATE COLLATION [ IF NOT EXISTS ]name( [ LOCALE =locale, ] [ LC_COLLATE =lc_collate, ] [ LC_CTYPE =lc_ctype, ] [ PROVIDER =provider, ] [ DETERMINISTIC =boolean, ] [ RULES =rules, ] [ VERSION =version] ) CREATE COLLATION [ IF NOT EXISTS ]nameFROMexisting_collation
CREATE COLLATION 使用指定的作業系統區域設定(locale)來定義一個新的排序規則,或者透過複製現有的排序規則來建立。
要能夠建立排序規則,您必須對目標模式(schema)擁有 CREATE 許可權。
IF NOT EXISTS如果同名的排序規則已存在,則不會報錯,而是會發出一個通知。請注意,這並不保證現有的排序規則與將被建立的排序規則有任何相似之處。
name排序規則的名稱。排序規則名稱可以包含模式限定。如果未包含,則排序規則在當前模式下定義。排序規則名稱在該模式下必須是唯一的。(系統目錄可能包含具有相同名稱但不同編碼的排序規則,但如果資料庫編碼不匹配,這些將被忽略。)
locale此排序規則的 locale 名稱。有關詳細資訊,請參閱 第 23.2.2.3.1 節 和 第 23.2.2.3.2 節。
如果 provider 是 libc,這是同時設定 LC_COLLATE 和 LC_CTYPE 的一種快捷方式。如果您指定了 locale,則不能指定這兩個引數中的任何一個。
如果 provider 是 builtin,則必須指定 locale 並將其設定為 C、C.UTF-8 或 PG_UNICODE_FAST 之一。
lc_collate如果 provider 是 libc,則為 LC_COLLATE locale 分類使用指定的作業系統 locale。
lc_ctype如果 provider 是 libc,則為 LC_CTYPE locale 分類使用指定的作業系統 locale。
provider指定用於此排序規則的 locale 服務的提供程式。可能的值為 builtin、icu(如果伺服器是用 ICU 支援構建的)或 libc。libc 是預設值。有關詳細資訊,請參閱 第 23.1.4 節。
DETERMINISTIC指定排序規則是否應使用確定性比較。預設為 true。確定性比較即使在邏輯上相等的情況下,也將位元組不相等的字串視為不相等。PostgreSQL 使用位元組比較來打破平局。非確定性比較可能導致排序規則,例如,不區分大小寫或重音。為此,您需要選擇一個合適的 LOCALE 設定並將排序規則在此處設定為非確定性。
僅當使用 ICU 提供程式時才支援非確定性排序規則。
rules指定附加的排序規則規則來定製排序規則的行為。這僅支援 ICU。有關詳細資訊,請參閱 第 23.2.3.4 節。
version指定要與排序規則一起儲存的版本字串。通常,應省略此項,這樣版本將根據作業系統提供的排序規則的實際版本計算得出。此選項旨在由 pg_upgrade 用於從現有安裝中複製版本。
有關如何處理排序規則版本不匹配的資訊,請參閱 ALTER COLLATION。
existing_collation要複製的現有排序規則的名稱。新排序規則將具有與現有排序規則相同的屬性,但它將是一個獨立的物件。
CREATE COLLATION 在 pg_collation 系統目錄上獲取一個 SHARE ROW EXCLUSIVE 鎖,該鎖是自衝突的,因此一次只能執行一個 CREATE COLLATION 命令。
使用 DROP COLLATION 來刪除使用者定義的排序規則。
有關如何建立排序規則的更多資訊,請參閱 第 23.2.2.3 節。
當使用 libc 排序規則提供程式時,locale 必須適用於當前資料庫編碼。有關精確規則,請參閱 CREATE DATABASE。
要從作業系統 locale fr_FR.utf8 建立排序規則(假設當前資料庫編碼是 UTF8)
CREATE COLLATION french (locale = 'fr_FR.utf8');
要使用 ICU 提供程式使用德語電話簿排序順序建立排序規則
CREATE COLLATION german_phonebook (provider = icu, locale = 'de-u-co-phonebk');
要使用 ICU 提供程式,基於 ICU 根 locale,並帶有自定義規則來建立排序規則
CREATE COLLATION custom (provider = icu, locale = 'und', rules = '&V << w <<< W');
有關規則語法的進一步詳細資訊和示例,請參閱 第 23.2.3.4 節。
從現有排序規則建立排序規則
CREATE COLLATION german FROM "de_DE";
這可以方便應用程式使用與作業系統無關的排序規則名稱。
SQL 標準中有一個 CREATE COLLATION 語句,但它僅限於複製現有排序規則。PostgreSQL 擴充套件支援建立新排序規則的語法。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步說明的內容,請使用 此表單 來報告文件問題。