Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

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,了解如何处理排序规则版本不匹配。

现有排序规则

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

注意事项

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";

这对于在应用程序中使用与操作系统无关的排序规则名称会较为方便。

兼容性

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

另请参见

ALTER COLLATIONDROP COLLATION