Skip to content

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

校对规则的名称。校对规则名称可以限定架构。如果不是,则在当前架构中定义校对规则。校对规则名称在该架构中必须唯一。(系统目录可以包含具有其他编码的同名校对规则,但如果数据库编码不匹配,则会忽略这些校对规则。)

语言环境

此校对的语言环境名称。有关详细信息,请参见第 24.2.2.3.1 节第 24.2.2.3.2 节

如果providerlibc,这是同时设置LC_COLLATELC_CTYPE的快捷方式。如果您指定locale,则不能指定这两个参数。

lc_collate

如果providerlibc,请使用指定的LC_COLLATE语言环境类别的操作系统语言环境。

lc_ctype

如果providerlibc,请使用指定的LC_CTYPE语言环境类别的操作系统语言环境。

provider

指定用于与此校对关联的语言环境服务的提供程序。可能的值为icu(如果服务器使用 ICU 支持构建)或libclibc是默认值。有关详细信息,请参见第 24.1.4 节

DETERMINISTIC

指定校对是否应使用确定性比较。默认值为 true。确定性比较认为字节不相等的字符串不相等,即使比较认为它们在逻辑上相等。PostgreSQL 使用字节比较来打破平局。非确定性比较可以使校对(例如)不区分大小写或重音。为此,您需要选择适当的LC_COLLATE设置在此处将校对设置为非确定性。

非确定性校对仅受 ICU 提供程序支持。

rules

指定其他校对规则以自定义校对的行为。这仅受 ICU 支持。有关详细信息,请参见第 24.2.3.4 节

version

指定与校对一起存储的版本字符串。通常,这应省略,这将导致版本从操作系统提供的校对的实际版本计算。此选项旨在由 pg_upgrade 用于从现有安装复制版本。

另请参阅 ALTER COLLATION,了解如何处理校对版本不匹配。

existing_collation

要复制的现有校对的名称。新校对将具有与现有校对相同的属性,但它将是一个独立的对象。

注释

CREATE COLLATIONpg_collation系统目录上采用SHARE ROW EXCLUSIVE锁,这是自冲突的,因此一次只能运行一个CREATE COLLATION命令。

使用DROP COLLATION删除用户定义的校对。

有关如何创建校对的详细信息,请参阅第 24.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');

有关规则语法的更多详细信息和示例,请参阅第 24.2.3.4 节

从现有校对创建校对

CREATE COLLATION german FROM "de_DE";

这可以方便地在应用程序中使用与操作系统无关的校对名称。

兼容性

SQL 标准中有一个CREATE COLLATION语句,但它仅限于复制现有校对。创建新校对的语法是PostgreSQL扩展。

另请参阅

ALTER COLLATIONDROP COLLATION