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
FROMexisting_collation
CREATE COLLATION
使用指定的操作系统区域设置或通过复制现有校对规则来定义新的校对规则。
要能够创建校对规则,您必须对目标架构具有 CREATE
权限。
IF NOT EXISTS
如果已存在同名校对规则,则不引发错误。在这种情况下会发出通知。请注意,无法保证现有校对规则与将创建的校对规则类似。
name
校对规则的名称。校对规则名称可以限定架构。如果不是,则在当前架构中定义校对规则。校对规则名称在该架构中必须唯一。(系统目录可以包含具有其他编码的同名校对规则,但如果数据库编码不匹配,则会忽略这些校对规则。)
语言环境
此校对的语言环境名称。有关详细信息,请参见第 24.2.2.3.1 节和第 24.2.2.3.2 节。
如果provider
是libc
,这是同时设置LC_COLLATE
和LC_CTYPE
的快捷方式。如果您指定locale
,则不能指定这两个参数。
lc_collate
如果provider
是libc
,请使用指定的LC_COLLATE
语言环境类别的操作系统语言环境。
lc_ctype
如果provider
是libc
,请使用指定的LC_CTYPE
语言环境类别的操作系统语言环境。
provider
指定用于与此校对关联的语言环境服务的提供程序。可能的值为icu
(如果服务器使用 ICU 支持构建)或libc
。 libc
是默认值。有关详细信息,请参见第 24.1.4 节。
DETERMINISTIC
指定校对是否应使用确定性比较。默认值为 true。确定性比较认为字节不相等的字符串不相等,即使比较认为它们在逻辑上相等。PostgreSQL 使用字节比较来打破平局。非确定性比较可以使校对(例如)不区分大小写或重音。为此,您需要选择适当的LC_COLLATE
设置和在此处将校对设置为非确定性。
非确定性校对仅受 ICU 提供程序支持。
rules
指定其他校对规则以自定义校对的行为。这仅受 ICU 支持。有关详细信息,请参见第 24.2.3.4 节。
version
指定与校对一起存储的版本字符串。通常,这应省略,这将导致版本从操作系统提供的校对的实际版本计算。此选项旨在由 pg_upgrade
用于从现有安装复制版本。
另请参阅 ALTER COLLATION,了解如何处理校对版本不匹配。
existing_collation
要复制的现有校对的名称。新校对将具有与现有校对相同的属性,但它将是一个独立的对象。
CREATE COLLATION
在 pg_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 扩展。