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
使用指定的 operating system locale 设置或通过复制现有排序规则来定义新的排序规则。
要能够创建排序规则,您必须对目标模式拥有 CREATE
权限。
IF NOT EXISTS
如果已存在具有相同名称的排序规则,则不抛出错误。在这种情况下会发出通知。请注意,无法保证现有排序规则与本应创建的排序规则有任何相似之处。
name
排序规则的名称。排序规则名称可以是模式限定的。如果不是,则排序规则在当前模式中定义。排序规则名称在该模式中必须唯一。(系统目录可以包含对其他编码具有相同名称的排序规则,但如果数据库编码不匹配,则会忽略这些排序规则。)
locale
此排序规则的区域设置名称。有关详细信息,请参阅第 23.2.2.3.1 节和第 23.2.2.3.2 节。
如果 provider
为 libc
,则这是同时设置 LC_COLLATE
和 LC_CTYPE
的快捷方式。如果指定了 locale
,则不能指定这两个参数中的任何一个。
如果 provider
为 builtin
,则必须指定 locale
并将其设置为 C
或 C.UTF-8
。
lc_collate
如果 provider
为 libc
,则对 LC_COLLATE
区域设置类别使用指定的 operating system locale。
lc_ctype
如果 provider
为 libc
,则对 LC_CTYPE
区域设置类别使用指定的 operating system locale。
provider
指定用于与此排序规则关联的区域设置服务的提供程序。可能的值为 builtin
、icu
(如果服务器使用 ICU 支持构建)或 libc
。libc
是默认值。有关详细信息,请参阅第 23.1.4 节。
DETERMINISTIC
指定排序规则是否应使用确定性比较。默认为 true。确定性比较认为,即使按比较逻辑上相等,也不等于字节级不相等的字符串。PostgreSQL 使用字节级比较来解决平局。非确定性比较可能导致排序规则不区分大小写或不区分重音。为此,您需要选择合适的 LOCALE
设置以及在此处将排序规则设置为非确定性。
非确定性排序规则仅受 ICU 提供程序支持。
rules
指定其他排序规则以自定义排序规则的行为。这仅受 ICU 支持。有关详细信息,请参阅第 23.2.3.4 节。
version
指定要与排序规则一起存储的版本字符串。通常,应省略此项,这将导致版本从操作系统提供的排序规则的实际版本计算得出。此选项旨在由 pg_upgrade
用于从现有安装复制版本。
有关如何处理排序规则版本不匹配,请参阅ALTER COLLATION。
existing_collation
要复制的现有排序规则的名称。新排序规则将与现有排序规则具有相同的属性,但它将是一个独立的对象。
CREATE COLLATION
对 pg_collation
系统目录获取自冲突的 SHARE ROW EXCLUSIVE
锁,因此一次只能运行一个 CREATE COLLATION
命令。
使用 DROP COLLATION
删除用户定义的排序规则。
有关如何创建排序规则的更多信息,请参阅第 23.2.2.3 节。
使用 libc
排序规则提供程序时,区域设置必须适用于当前数据库编码。有关精确规则,请参阅CREATE DATABASE。
要从 operating system locale 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";
这可以方便地在应用程序中使用与操作系统无关的排序规则名称。
SQL 标准中有一个 CREATE COLLATION
语句,但它仅限于复制现有排序规则。创建新排序规则的语法是 PostgreSQL 扩展。
如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符的内容或需要进一步澄清的内容,请使用此表单报告文档问题。