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
FROMexisting_collation
CREATE COLLATION
使用指定的操作系统区域
设置或者复制一个现有的排序规则来定义新的排序规则。
要创建一种排序规则,你必须拥有目标模式上的
CREATE
特权。
IF NOT EXISTS
如果已经存在一个具有相同名称的排序规则,则不要抛出错误。这种情况下会发出一个提示。注意无法确保现有的排序规则与将要创建的排序规则有任何相似。
name
排序规则的名字,可以被模式限定。如果没有用模式限定,该排序规则 会被定义在当前模式中。排序规则名称在其所处的模式中必须唯一(系统 目录可以为其他编码包含具有相同名称的排序规则,但数据库编码不匹配 时它们会被忽略)。
locale
这是一种一次设置LC_COLLATE
和LC_CTYPE
的快捷方式。如果你指定它,你就
不能指定那两个参数。
lc_collate
为LC_COLLATE
区域分类使用指定的操作系统
区域。
lc_ctype
为LC_CTYPE
区域分类使用指定的操作系统
区域。
provider
指定用于与这个排序规则相关的locale服务的提供者。可能的值有:icu
、libc
。libc
是默认值。可用的选择取决于操作系统和编译选项。
version
指定与排序规则一同存储的版本字符串。通常这会被省略,然后导致从操作系统提供的排序规则的实际版本计算出该版本字符串。这个选项的目的是由pg_upgrade
使用,以便从一个现有的安装中拷贝版本。
有关如何处理排序规则版本失配问题,还可以参考ALTER COLLATION。
existing_collation
要复制的一种现有的排序规则的名称。新的排序规则将和现有的具有 同样的属性,但是它是一个独立的对象。
使用DROP COLLATION
可移除用户定义的排序规则。
更多有关如何创建排序规则的信息请见Section 23.2.2.3。
在使用libc
排序规则提供者时,locale必须适用于当前的数据库编码。精确的规则请见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');
从一个现有的排序规则创建一个新的排序规则:
CREATE COLLATION german FROM "de_DE";
能在应用中使用与操作系统无关的排序规则名称就很方便了。
在 SQL 标准中有一个CREATE COLLATION
语句,但是它被限制为只能复制一个现有的排序规则。创建新排序规则的
语法是一种PostgreSQL扩展。