支援的版本:目前 (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 使用指定的作業系統地區設定,或透過複製現有的排序規則來定義新的排序規則。

若要能夠建立排序規則,您必須對目標綱要具有 CREATE 權限。

參數

IF NOT EXISTS

如果具有相同名稱的排序規則已存在,則不要拋出錯誤。 在這種情況下,會發出通知。 請注意,不能保證現有的排序規則與將要建立的排序規則相似。

name

排序規則的名稱。 排序規則名稱可以是綱要限定的。 如果不是,則排序規則是在目前的綱要中定義的。 排序規則名稱在該綱要中必須是唯一的。(系統目錄可以包含針對其他編碼具有相同名稱的排序規則,但如果資料庫編碼不符,則會忽略這些排序規則。)

locale

此排序規則的地區設定名稱。 有關詳細信息,請參閱第 23.2.2.3.1 節第 23.2.2.3.2 節

如果 providerlibc,這是同時設定 LC_COLLATELC_CTYPE 的捷徑。 如果您指定 locale,則無法指定這兩個參數。

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

lc_collate

如果 providerlibc,則將指定的作業系統地區設定用於 LC_COLLATE 地區設定類別。

lc_ctype

如果 providerlibc,則將指定的作業系統地區設定用於 LC_CTYPE 地區設定類別。

provider

指定用於與此排序規則關聯的地區設定服務的提供者。 可能的值為 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 排序規則提供者時,該地區設定必須適用於目前的資料庫編碼。 有關精確的規則,請參閱 CREATE DATABASE

範例

從作業系統地區設定 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 地區設定,並具有自訂規則來建立排序規則

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 擴充功能。

提交更正

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