================ CREATE COLLATION ================ .. container:: refentry :name: SQL-CREATECOLLATION .. container:: titlepage .. container:: refnamediv .. rubric:: CREATE COLLATION :name: create-collation CREATE COLLATION — 定义一种新排序规则 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: synopsis CREATE COLLATION [ IF NOT EXISTS ] name ( [ LOCALE = locale, ] [ LC_COLLATE = lc_collate, ] [ LC_CTYPE = lc_ctype, ] [ PROVIDER = provider, ] [ DETERMINISTIC = boolean, ] [ VERSION = version ] ) CREATE COLLATION [ IF NOT EXISTS ] name FROM existing_collation .. container:: refsect1 :name: SQL-CREATECOLLATION-DESCRIPTION .. rubric:: 描述 :name: 描述 ``CREATE COLLATION``\ 使用指定的操作系统区域 设置或者复制一个现有的排序规则来定义新的排序规则。 要创建一种排序规则,你必须拥有目标模式上的 ``CREATE``\ 特权。 .. container:: refsect1 :name: id-1.9.3.59.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist ``IF NOT EXISTS`` 如果已经存在了同名的排序规则,则不要抛出错误。在这种情况下发出一个通知。 请注意,不保证已经存在的排序规则与要创建的这个类似。 *``name``* 排序规则的名字,可以被模式限定。如果没有用模式限定,该排序规则 会被定义在当前模式中。排序规则名称在其所处的模式中必须唯一(系统 目录可以为其他编码包含具有相同名称的排序规则,但数据库编码不匹配 时它们会被忽略)。 *``locale``* 这是一种一次设置\ ``LC_COLLATE`` 和\ ``LC_CTYPE``\ 的快捷方式。如果你指定它,你就 不能指定那两个参数。 *``lc_collate``* 为\ ``LC_COLLATE``\ 区域分类使用指定的操作系统 区域。 *``lc_ctype``* 为\ ``LC_CTYPE``\ 区域分类使用指定的操作系统 区域。 *``provider``* 指定用于与此排序规则相关的区域服务的提供程序。可能的值是: ``icu``\ 、 ``libc``\ 。 默认是\ ``libc``\ 。 可用的选择取决于操作系统和构建选项。 ``DETERMINISTIC`` 规定排序是否应使用确定性比较。默认值为true。确定性比较认为那些在字节上不相等的字符串是不相等的,即使它们在逻辑上被比较认为相等。 PostgreSQL使用字节比较来断开连接。不确定的比较可能会使排序规则大小写不敏感或音调不敏感。 因此,您需要选择一个适当的\ ``LC_COLLATE``\ 设置\ *并且*\ 在此处将排序规则设置为不确定。 非确定性排序规则仅被ICU提供者支持。 *``version``* 指定使用该排序规则存储的版本字符串。通常忽略该选项, 这会导致版本从操作系统提供的排序规则实际版本中计算出来。 此选项旨在供\ ``pg_upgrade``\ 用于复制现有安装中的版本。 *``existing_collation``* 要复制的一种现有的排序规则的名称。新的排序规则将和现有的具有 同样的属性,但是它是一个独立的对象。 .. container:: refsect1 :name: SQL-CREATECOLLATION-NOTES .. rubric:: 注解 :name: 注解 ``CREATE COLLATION`` 采用\ ``SHARE ROW EXCLUSIVE``\ 锁,在\ ``pg_collation``\ 系统分类上,这是自我冲突的,所以一次只能运行一条\ ``CREATE COLLATION`` 命令。 使用\ ``DROP COLLATION``\ 可移除用户定义的排序规则。 使用\ ``libc``\ 排序规则提供程序时,语言环境必须适用于当前的数据库编码。 .. container:: refsect1 :name: SQL-CREATECOLLATION-EXAMPLES .. rubric:: 示例 :name: 示例 从操作系统区域\ ``fr_FR.utf8``\ 创建一种排序规则(假定 当前数据库编码是\ ``UTF8``\ ): .. code:: programlisting CREATE COLLATION french (locale = 'fr_FR.utf8'); 使用German phone book排序顺序使用ICU提供程序创建排序规则: .. code:: programlisting CREATE COLLATION german_phonebook (provider = icu, locale = 'de-u-co-phonebk'); 从一个现有的排序规则创建一个新的排序规则: .. code:: programlisting CREATE COLLATION german FROM "de_DE"; 能在应用中使用与操作系统无关的排序规则名称就很方便了。 .. container:: refsect1 :name: SQL-CREATECOLLATION-COMPAT .. rubric:: 兼容性 :name: 兼容性 在 SQL 标准中有一个\ ``CREATE COLLATION`` 语句,但是它被限制为只能复制一个现有的排序规则。创建新排序规则的 语法是一种PostgreSQL扩展。