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 ]name
FROMexisting_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 擴充套件支援建立新排序規則的語法。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步說明的內容,請使用 此表單 來報告文件問題。