CREATE COLLATION
CREATE COLLATION — определить новое правило сортировки
Синтаксис
CREATE COLLATION [ IF NOT EXISTS ] имя (
[ LOCALE = локаль, ]
[ LC_COLLATE = категория_сортировки, ]
[ LC_CTYPE = категория_типов_символов, ]
[ PROVIDER = провайдер, ]
[ DETERMINISTIC = логическое_значение, ]
[ RULES = правила, ]
[ VERSION = версия ]
)
CREATE COLLATION [ IF NOT EXISTS ] имя FROM существующее_правило_сортировки
Описание
Команда CREATE COLLATION определяет новое правило сортировки, используя указанные
параметры локали операционной системы или копируя существующее правило сортировки.
Чтобы создать правило сортировки, необходимо иметь право CREATE в целевой схеме.
Параметры
IF NOT EXISTS
Не выдавать ошибку, если правило сортировки с тем же именем уже существует. В этом случае просто выводится уведомление. Обратите внимание, что нет никакой гарантии, что существующее правило сортировки хоть чем-то похоже на то, которое было бы создано.
имя
Имя правила сортировки (может быть дополнено схемой). Если схема не указана, правило сортировки определяется в текущей схеме. Имя правила сортировки должно быть уникальным в своей схеме. (Системные каталоги могут содержать правила сортировки с тем же именем для других кодировок, но они игнорируются, если кодировка базы данных с ними не совпадает.)
локаль
Имя локали для этого правила сортировки. Подробную информацию см. в подразделах Создание правил сортировки libc и Создание правил сортировки ICU.
Если провайдером является libc, это ярлык для одновременной установки LC_COLLATE и LC_CTYPE. Если задать локаль, то ни один из этих параметров нельзя будет указать отдельно.
категория_сортировки
Если провайдером является libc, использовать указанную локаль операционной системы в качестве категории локали LC_COLLATE.
категория_типов_символов
Если провайдером является libc, использовать указанную локаль операционной системы в качестве категории локали LC_CTYPE.
провайдер
Задает провайдера, который будет использоваться для служб локали, связанных с этим правилом сортировки. Возможные значения: icu (если сервер был собран с поддержкой ICU) или libc. По умолчанию используется провайдер libc. Подробную информацию см. в подразделе Провайдеры локалей.
DETERMINISTIC
Определяет, должны ли правила сортировки использовать детерминированные
сравнения. Значение по умолчанию равно true (использовать детерминированные
сравнения). При детерминированном сравнении строки, которые не равны побайтово,
считаются неравными, даже если они считаются логически равными при сравнении.
QHB решает вопрос их равенства, используя побайтовое сравнение.
Недетерминированное сравнение может сделать правило сортировки, к примеру,
независящим от ударения или регистра символов. Для этого нужно выбрать подходящий
вариант LOCALE и здесь сделать это правило сортировки недетерминированным.
Недетерминированные правила сортировки поддерживаются только с провайдером ICU.
правила
Задает дополнительные правила для настройки поведения этого правила сортировки. Параметр поддерживается только для ICU. Подробную информацию см. в подразделе Правила адаптации 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');
Создание правила сортировки с пользовательскими правилами, с использованием провайдера ICU на основе корневой локали ICU:
CREATE COLLATION custom (provider = icu, locale = 'und', rules = '&V << w <<< W');
Дополнительную информацию и примеры синтаксиса правил см. в подразделе Правила адаптации ICU.
Создание правила сортировки из уже существующего:
CREATE COLLATION german FROM "de_DE";
Иногда бывает удобно использовать в приложениях имена правил сортировки, не зависящие от операционной системы.
Совместимость
В стандарте SQL есть команда CREATE COLLATION, но она ограничивается копированием
существующего правила сортировки. Синтаксис для создания нового правила сортировки
является расширением QHB.