CREATE COLLATION
CREATE COLLATION — 定义一种新排序规则
大纲
CREATE COLLATION [ IF NOT EXISTS ] name (
[ LOCALE = locale, ]
[ LC_COLLATE = lc_collate, ]
[ LC_CTYPE = lc_ctype, ]
[ PROVIDER = provider, ]
[ VERSION = version ]
)
CREATE COLLATION [ IF NOT EXISTS ] name FROM existing_collation
描述
CREATE COLLATION使用指定的操作系统区域 设置或者复制一个现有的排序规则来定义新的排序规则。
要创建一种排序规则,你必须拥有目标模式上的 CREATE特权。
参数
IF NOT EXISTS : 如果已经存在了同名的排序规则,则不要抛出错误。在这种情况下发出一个通知。 请注意,不保证已经存在的排序规则与要创建的这个类似。
name : 排序规则的名字,可以被模式限定。如果没有用模式限定,该排序规则 会被定义在当前模式中。排序规则名称在其所处的模式中必须唯一(系统 目录可以为其他编码包含具有相同名称的排序规则,但数据库编码不匹配 时它们会被忽略)。
locale : 这是一种一次设置LC_COLLATE 和LC_CTYPE的快捷方式。如果你指定它,你就 不能指定那两个参数。
lc_collate : 为LC_COLLATE区域分类使用指定的操作系统 区域。
lc_ctype : 为LC_CTYPE区域分类使用指定的操作系统 区域。
provider : 指定用于与此排序规则相关的区域服务的提供程序。可能的值是: icu、 libc。 默认是libc。 可用的选择取决于操作系统和构建选项。
version : 指定使用该排序规则存储的版本字符串。通常忽略该选项, 这会导致版本从操作系统提供的排序规则实际版本中计算出来。 此选项旨在供pg_upgrade用于复制现有安装中的版本。
又见[ALTER COLLATION](sql-altercollation.md "ALTER COLLATION")获取如何处理排序规则版本错误匹配。
existing_collation : 要复制的一种现有的排序规则的名称。新的排序规则将和现有的具有 同样的属性,但是它是一个独立的对象。
注解
使用DROP COLLATION可移除用户定义的排序规则。
关于如何创建排序规则的更多信息可见第 23.2.2.3 节。
使用libc排序规则提供程序时,语言环境必须适用于当前的数据库编码。 有关精确的规则,请参见CREATE DATABASE。
示例
从操作系统区域fr_FR.utf8创建一种排序规则(假定 当前数据库编码是UTF8):
CREATE COLLATION french (locale = 'fr_FR.utf8');
使用German phone book排序顺序使用ICU提供程序创建排序规则:
CREATE COLLATION german_phonebook (provider = icu, locale = 'de-u-co-phonebk');
从一个现有的排序规则创建一个新的排序规则:
CREATE COLLATION german FROM "de_DE";
能在应用中使用与操作系统无关的排序规则名称就很方便了。
兼容性
在 SQL 标准中有一个CREATE COLLATION 语句,但是它被限制为只能复制一个现有的排序规则。创建新排序规则的 语法是一种PostgreSQL扩展。
