2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1

CREATE COLLATION

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 FROM existing_collation

描述

CREATE COLLATION 使用指定的作業系統區域設定(locale)來定義一個新的排序規則,或者透過複製現有的排序規則來建立。

要能夠建立排序規則,您必須對目標模式(schema)擁有 CREATE 許可權。

引數

IF NOT EXISTS

如果同名的排序規則已存在,則不會報錯,而是會發出一個通知。請注意,這並不保證現有的排序規則與將被建立的排序規則有任何相似之處。

name

排序規則的名稱。排序規則名稱可以包含模式限定。如果未包含,則排序規則在當前模式下定義。排序規則名稱在該模式下必須是唯一的。(系統目錄可能包含具有相同名稱但不同編碼的排序規則,但如果資料庫編碼不匹配,這些將被忽略。)

locale

此排序規則的 locale 名稱。有關詳細資訊,請參閱 第 23.2.2.3.1 節第 23.2.2.3.2 節

如果 providerlibc,這是同時設定 LC_COLLATELC_CTYPE 的一種快捷方式。如果您指定了 locale,則不能指定這兩個引數中的任何一個。

如果 providerbuiltin,則必須指定 locale 並將其設定為 CC.UTF-8PG_UNICODE_FAST 之一。

lc_collate

如果 providerlibc,則為 LC_COLLATE locale 分類使用指定的作業系統 locale。

lc_ctype

如果 providerlibc,則為 LC_CTYPE locale 分類使用指定的作業系統 locale。

provider

指定用於此排序規則的 locale 服務的提供程式。可能的值為 builtinicu(如果伺服器是用 ICU 支援構建的)或 libclibc 是預設值。有關詳細資訊,請參閱 第 23.1.4 節

DETERMINISTIC

指定排序規則是否應使用確定性比較。預設為 true。確定性比較即使在邏輯上相等的情況下,也將位元組不相等的字串視為不相等。PostgreSQL 使用位元組比較來打破平局。非確定性比較可能導致排序規則,例如,不區分大小寫或重音。為此,您需要選擇一個合適的 LOCALE 設定將排序規則在此處設定為非確定性。

僅當使用 ICU 提供程式時才支援非確定性排序規則。

rules

指定附加的排序規則規則來定製排序規則的行為。這僅支援 ICU。有關詳細資訊,請參閱 第 23.2.3.4 節

version

指定要與排序規則一起儲存的版本字串。通常,應省略此項,這樣版本將根據作業系統提供的排序規則的實際版本計算得出。此選項旨在由 pg_upgrade 用於從現有安裝中複製版本。

有關如何處理排序規則版本不匹配的資訊,請參閱 ALTER COLLATION

existing_collation

要複製的現有排序規則的名稱。新排序規則將具有與現有排序規則相同的屬性,但它將是一個獨立的物件。

註釋

CREATE COLLATIONpg_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 擴充套件支援建立新排序規則的語法。

提交更正

如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步說明的內容,請使用 此表單 來報告文件問題。