文档

CREATE COLLATION

更新时间:

CREATE COLLATION使用指定的操作系统区域设置或者复制一个现有的排序规则来定义新的排序规则。

简介

CREATE COLLATION使用指定的操作系统区域设置或者复制一个现有的排序规则来定义新的排序规则。

要创建一种排序规则,你必须拥有目标模式上的 CREATE特权。

语法

    CREATE COLLATION [ IF NOT EXISTS ] name (
        [ LOCALE = locale, ]
        [ LC_COLLATE = lc_collate, ]
        [ LC_CTYPE = lc_ctype, ]
        [ PROVIDER = provider, ]
        [ DETERMINISTIC = boolean, ]
        [ VERSION = version ]
    )
    CREATE COLLATION [ IF NOT EXISTS ] name FROM existing_collation

参数

IF NOT EXISTS如果已经存在了同名的排序规则,则不要抛出错误。在这种情况下发出一个通知。 请注意,不保证已经存在的排序规则与要创建的这个类似。

name排序规则的名字,可以被模式限定。如果没有用模式限定,该排序规则会被定义在当前模式中。排序规则名称在其所处的模式中必须唯一(系统目录可以为其他编码包含具有相同名称的排序规则,但数据库编码不匹配时它们会被忽略)。

locale这是一次设置LC_COLLATELC_CTYPE的快捷方式。如果指定它,就不能指定那两个参数。

lc_collateLC_COLLATE区域分类使用指定的操作系统区域。

lc_ctypeLC_CTYPE区域分类使用指定的操作系统区域。

provider指定用于与此排序规则相关的区域服务的提供程序。可能的值是: iculibc。 默认是libc。 可用的选择取决于操作系统和构建选项。

DETERMINISTIC规定排序是否应使用确定性比较。默认值为 true。确定性比较认为那些在字节上不相等的字符串是不相等的,即使它们在逻辑上被比较认为相等。 PolarDB 使用字节比较来断开连接。不确定的比较可能会使排序规则大小写不敏感或音调不敏感。 因此,您需要选择一个适当的LC_COLLATE设置并且在此处将排序规则设置为不确定。

非确定性排序规则仅被 ICU 提供者支持。

version指定使用该排序规则存储的版本字符串。通常忽略该选项, 这会导致版本从操作系统提供的排序规则从实际版本中计算出来。 此选项旨在供pg_upgrade用于复制现有安装中的版本。

又见 ALTER COLLATION 获取如何处理排序规则版本错误匹配。

existing_collation要复制的一种现有的排序规则的名称。新的排序规则将和现有的具有同样的属性,但是它是一个独立的对象。

说明

CREATE COLLATION 采用SHARE ROW EXCLUSIVE锁,在pg_collation系统分类上,这是自我冲突的,所以一次只能运行一条CREATE COLLATION 命令。

使用DROP COLLATION可移除用户定义的排序规则。

使用libc排序规则提供程序时,语言环境必须适用于当前的数据库编码。 有关精确的规则,请参见 CREATE DATABASE。

示例

从操作系统区域fr_FR.utf8创建一种排序规则(假定当前数据库编码是UTF8):

    CREATE COLLATION french (locale = 'fr_FR.utf8');

使用German phone book 排序顺序使用 ICU 提供程序创建排序规则:

    CREATE COLLATION german_phonebook (provider = icu, locale = 'de-u-co-phonebk');

从一个现有的排序规则创建一个新的排序规则:

    CREATE COLLATION german FROM "de_DE";

能在应用中使用与操作系统无关的排序规则名称就很方便了。