Postgresql 中文操作指南

CREATE COLLATION

CREATE COLLATION — 定义新的校对规则

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

Description

CREATE COLLATION 使用指定的 OS 区域设置或通过复制已存在的校对规则定义一个新的校对规则。

要创建校对规则,您必须对目标架构具有 CREATE 权限。

Parameters

  • IF NOT EXISTS

    • 如果已存在具有相同名称的校对规则,则不引发错误。在这种情况下将发出通知。请注意,无法保证现有校对规则与已创建的校对规则相似。

  • name

    • 校对规则的名称。校对规则名称可以具有架构限定符。如果没有限定符,则在当前架构中定义校对规则。校对规则名称在该架构中必须唯一。(系统目录可以包含具有相同名称但编码不同的校对规则,但如果数据库的编码不匹配,这些校对规则将被忽略。)

  • locale

    • 此校对规则的区域设置名称。有关详细信息,请参见 Section 24.2.2.3.1Section 24.2.2.3.2

    • 如果 providerlibc ,则这是同时设置 LC_COLLATELC_CTYPE 的快捷方式。如果指定 locale ,则不能指定这两个参数中的任何一个。

  • lc_collate

    • 如果 providerlibc ,则对 LC_COLLATE 区域设置类别使用指定的 OS 区域设置。

  • lc_ctype

    • 如果 providerlibc ,则对 LC_CTYPE 区域设置类别使用指定的 OS 区域设置。

  • provider

    • 指定用于与此校对规则关联的区域设置服务的提供程序。可能的值为 icu (如果服务器是在构建时启用了 ICU 支持)或 libclibc 为默认值。有关详细信息,请参见 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 COLLATIONpg_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";

这可方便地在应用程序中使用与操作系统无关的排序名称。

Compatibility

SQL 标准中有 CREATE COLLATION 语句,但它仅限于复制现有排序。创建新排序的语法是 PostgreSQL 扩展。