# 创建排序规则

CREATE COLLATION — 定义一个新的排序规则

# 概要

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

# 描述

创建排序规则使用指定的操作系统区域设置或通过复制现有排序规则定义新排序规则。

为了能够创建排序规则,您必须拥有创造目标模式的特权。

# 参数

如果不存在

如果已存在具有相同名称的排序规则,则不要抛出错误。在这种情况下发出通知。请注意,不能保证现有排序规则与已创建的排序规则相同。

姓名

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

语言环境

这是设置的快捷方式LC_COLLATELC_CTYPE立刻。如果指定此项,则不能指定其中任何一个参数。

lc_collat​​e

使用指定的操作系统区域设置LC_COLLATE语言环境类别。

lc_ctype

使用指定的操作系统区域设置LC_CTYPE语言环境类别。

提供者

指定用于与此排序规则关联的区域设置服务的提供程序。可能的值为:重症监护病房, .是默认值。可用选项取决于操作系统和构建选项。

确定性

指定排序规则是否应使用确定性比较。默认值为真。确定性比较认为不按字节相等的字符串不相等,即使比较认为它们在逻辑上相等。PostgreSQL 使用逐字节比较来打破平局。不确定的比较可以使排序规则不区分大小写或重音。为此,您需要选择合适的LC_COLLATE环境在此处将排序规则设置为不确定。

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

版本

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

也可以看看更改排序规则有关如何处理排序规则版本不匹配的信息。

existing_collat​​ion

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

# 笔记

创建排序规则需要一个共享行独家锁,这是自冲突的,在pg_collat​​ion系统目录,所以只有一个创建排序规则命令可以一次运行。

采用删除排序规则删除用户定义的排序规则。

第 24.2.2.3 节有关如何创建排序规则的更多信息。

使用时排序规则提供者,语言环境必须适用于当前的数据库编码。看创建数据库对于精确的规则。

# 例子

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

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

要使用 ICU 提供程序使用德国电话簿排序顺序创建排序规则:

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

要从现有排序规则创建排序规则:

CREATE COLLATION german FROM "de_DE";

这可以很方便地在应用程序中使用独立于操作系统的排序规则名称。

# 兼容性

有一个创建排序规则SQL 标准中的语句,但仅限于复制现有排序规则。创建新排序规则的语法是 PostgreSQL 扩展。

# 也可以看看

更改排序规则,删除排序规则