Postgresql 中文操作指南
Synopsis
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
Parameters
-
IF NOT EXISTS
-
如果已存在具有相同名称的校对规则,则不引发错误。在这种情况下将发出通知。请注意,无法保证现有校对规则与已创建的校对规则相似。
-
-
name
-
校对规则的名称。校对规则名称可以具有架构限定符。如果没有限定符,则在当前架构中定义校对规则。校对规则名称在该架构中必须唯一。(系统目录可以包含具有相同名称但编码不同的校对规则,但如果数据库的编码不匹配,这些校对规则将被忽略。)
-
-
locale
-
此校对规则的区域设置名称。有关详细信息,请参见 Section 24.2.2.3.1 和 Section 24.2.2.3.2 。
-
如果 provider 为 libc ,则这是同时设置 LC_COLLATE 和 LC_CTYPE 的快捷方式。如果指定 locale ,则不能指定这两个参数中的任何一个。
-
-
lc_collate
-
如果 provider 为 libc ,则对 LC_COLLATE 区域设置类别使用指定的 OS 区域设置。
-
-
lc_ctype
-
如果 provider 为 libc ,则对 LC_CTYPE 区域设置类别使用指定的 OS 区域设置。
-
-
provider
-
指定用于与此校对规则关联的区域设置服务的提供程序。可能的值为 icu (如果服务器是在构建时启用了 ICU 支持)或 libc 。 libc 为默认值。有关详细信息,请参见 Section 24.1.4 。
-
-
DETERMINISTIC
-
指定校对规则是否应使用确定性比较。默认值为 true。确定性比较将不是逐字节相等的字符串视为不相等,即使比较将它们视为逻辑相等。PostgreSQL 使用逐字节比较来打破平局。非确定性比较可使校对规则(例如)不区分大小写或不区分变音符号。为此,您需要选择适当的 LOCALE 设置 and 在此处将校对规则设置为非确定性。
-
仅当使用 ICU 提供程序时才支持非确定性校对规则。
-
-
rules
-
指定用于自定义校对规则行为的其他校对规则。仅对 ICU 提供支持。有关详细信息,请参见 Section 24.2.3.4 。
-
-
version
-
指定要与校对规则一起存储的版本字符串。通常,应忽略此项,这将导致版本基于操作系统提供的校对规则的实际版本进行计算。此选项旨在供 pg_upgrade 从现有安装中复制版本时使用。
-
请参阅 ALTER COLLATION ,了解如何处理排序版本不匹配。
-
-
existing_collation
-
要复制的现有排序的名称。新排序将具有与现有排序相同的属性,但它将是一个独立的对象。
-
Notes
CREATE COLLATION 在 pg_collation 系统目录中取得 SHARE ROW EXCLUSIVE 锁,该锁会发生自冲突,因此一次只能运行一个 CREATE COLLATION 命令。
使用 DROP COLLATION 移除用户自定义排序。
请参阅 Section 24.2.2.3 ,了解有关如何创建排序的更多信息。
在使用 libc 排序提供程序时,该语言环境必须适用于当前数据库编码。请参阅 CREATE DATABASE 以了解精确的规则。
Examples
要通过操作系统语言环境 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');
请参阅 Section 24.2.3.4 ,了解有关语法规则的更多详细信息和示例。
要从现有排序创建排序:
CREATE COLLATION german FROM "de_DE";
这可方便地在应用程序中使用与操作系统无关的排序名称。