CREATE COLLATION

CREATE COLLATION — определить новое правило сортировки


Синтаксис

CREATE COLLATION [ IF NOT EXISTS ] имя (
    [ LOCALE = локаль, ]
    [ LC_COLLATE = категория_сортировки, ]
    [ LC_CTYPE = категория_типов_символов, ]
    [ PROVIDER = провайдер, ]
    [ DETERMINISTIC = логическое_значение, ]
    [ VERSION = версия ]
)
CREATE COLLATION [ IF NOT EXISTS ] имя FROM существующее_правило

Описание

Команда CREATE COLLATION определяет новое правило сортировки, используя указанные параметры локали операционной системы или копируя существующие правила сортировки.

Чтобы создать правило сортировки, необходимо иметь право CREATE в целевой схеме.


Параметры

IF NOT EXISTS

Не выдавать ошибку, если правило сортировки с тем же именем уже существует. В этом случае выдается только замечание. Обратите внимание, что нет никакой гарантии, что существующее правило сортировки как-то соотносится с тем, которое было бы создано.

имя

Имя правила сортировки. Может быть дополнено схемой (если это не так, правило сортировки определяется в текущей схеме). Имя правила сортировки должно быть уникальным в этой схеме. (Системные каталоги могут содержать правила сортировки с тем же именем для других кодировок, но они игнорируются, если кодировка базы данных с ними не совпадает.)

локаль

Это ярлык для одновременной установки LC_COLLATE и LC_CTYPE. Если задать этот параметр, то нельзя будет указать ни один из этих параметров отдельно.

категория_сортировки

Использовать указанную локаль операционной системы в качестве категории локали LC_COLLATE.

категория_типов_символов

Использовать указанную локаль операционной системы в качестве категории локали LC_CTYPE.

провайдер

Задает провайдера, который будет использоваться для служб локали, связанных с данным правилом сортировки. Возможные значения: icu, libc. По умолчанию значение равно libc. Доступные варианты зависят от параметров операционной системы и сборки.

DETERMINISTIC

Определяет, должны ли правила сортировки использовать детерминированные сравнения. Значение по умолчанию равно true (использовать детерминированные сравнения). При детерминированном сравнении строки, которые не равны по байтам, считаются неравными, даже если они считаются логически равными при сравнении. QHB решает вопрос их равенства, используя побайтовое сравнение. Недетерминированное сравнение может сделать правило, к примеру, независимым от ударения или регистра символов. Для этого нужно выбрать подходящий вариант LC_COLLATE и сделать это правило сортировки недетерминированным.

Недетерминированные правила сортировки поддерживаются только с провайдером ICU.

версия

Задает строку версии, сохраняемую с правилом сортировки. Обычно ее следует опускать, что приведет к вычислению версии из фактической версии правила сортировки, предоставленного операционной системой. Этот параметр предназначен к использованию qhb_upgrade для копирования версии из существующей установки.

Что делать при несовпадении версий правил сортировки, описано на справочной странице команды [ALTER COLLATION].

существующее_правило

Имя копируемого существующего правила сортировки. Новое правило сортировки будет иметь те же свойства, что и существующее, но будет независимым объектом.


Примечания

CREATE COLLATION устанавливает в системном каталоге pg_collation автоконфликтную блокировку SHARE ROW EXCLUSIVE, поэтому в один момент времени может выполняться только одна команда CREATE COLLATION.

Для удаления пользовательских правил сортировки используйте команду DROP COLLATION.

Дополнительную информацию о создании правил сортировки см. в подразделе Создание новых правил сортировки.

При использовании провайдера правил сортировки libc локаль должна быть применима к текущей кодировке базы данных. Конкретные правила см. на справочной странице команды [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, но она ограничивается копированием существующих правил сортировки. Синтаксис для создания новых правил сортировки является расширением QHB.


См. также

[ALTER COLLATION], [DROP COLLATION]