CREATE COLLATION — создание новой правила сортировки
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 ]nameFROMexisting_collation
Команда CREATE COLLATION определяет новое правило сортировки, используя указанные настройки локали операционной системы или копируя существующее правило сортировки.
Чтобы иметь возможность создать правило сортировки, вы должны иметь привилегию CREATE в целевой схеме.
IF NOT EXISTSНе выдавать ошибку, если правило сортировки с таким именем уже существует. В этом случае выдаётся уведомление. Обратите внимание, что нет гарантии, что существующее правило сортировки хоть как-то похоже на то, которое было бы создано.
nameИмя правила сортировки. Имя правила сортировки может быть квалифицировано схемой. Если нет, правило сортировки определяется в текущей схеме. Имя правила сортировки должно быть уникальным в пределах этой схемы. (Системные каталоги могут содержать правила сортировки с одинаковыми именами для других кодировок, но они игнорируются, если кодировка базы данных не совпадает.)
localeИмя локали для этого правила сортировки. Подробности см. в разделах Раздел 3.8.2.2.3.1 и Раздел 3.8.2.2.3.2.
Если provider — libc, это быстрый способ одновременно задать LC_COLLATE и LC_CTYPE. Если вы указываете locale, вы не можете указывать ни один из этих параметров.
Если provider — builtin, то locale должен быть указан и установлен либо в C, либо в C.UTF-8.
lc_collate
Если provider — libc, использует указанную локаль операционной системы для категории локали LC_COLLATE.
lc_ctype
Если provider — libc, использует указанную локаль операционной системы для категории локали LC_CTYPE.
provider
Указывает поставщика услуг локали, связанных с этим правилом сортировки. Возможные значения: builtin, icu (если сервер собран с поддержкой ICU) или libc. По умолчанию используется libc. Подробности см. в разделе Раздел 3.8.1.4.
DETERMINISTIC
Указывает, должно ли правило сортировки использовать детерминированные сравнения. По умолчанию — true. Детерминированное сравнение считает строки, которые не равны побайтово, различными, даже если сравнение считает их логически равными. Digital Q.DataBase разрешает такие ситуации, используя побайтовое сравнение. Сравнение, не являющееся детерминированным, может сделать правило сортировки, например, нечувствительным к регистру или акцентам. Для этого необходимо выбрать подходящую настройку LOCALE и установить здесь для правила сортировки значение «не детерминированное».
Недетерминированные правила сортировки поддерживаются только поставщиком ICU.
rulesЗадаёт дополнительные правила сортировки для настройки поведения правила сортировки. Поддерживается только для ICU. Подробности см. в разделе Раздел 3.8.2.3.4.
version
Задаёт строку версии для хранения вместе с правилом сортировки. Обычно её следует опускать, что приведёт к вычислению версии на основе фактической версии правила сортировки, предоставляемой операционной системой. Этот параметр предназначен для использования утилитой pg_upgrade для копирования версии из существующей установки.
См. также ALTER COLLATION о том, как обрабатывать несоответствия версий правил сортировки.
existing_collationИмя существующего правила сортировки для копирования. Новое правило сортировки будет иметь те же свойства, что и существующее, но будет независимым объектом.
Команда CREATE COLLATION устанавливает блокировку SHARE ROW EXCLUSIVE (которая конфликтует сама с собой) на системный каталог pg_collation, поэтому одновременно может выполняться только одна команда CREATE COLLATION.
Используйте команду DROP COLLATION для удаления пользовательских правил сортировки.
Дополнительные сведения о создании правил сортировки см. в разделе Раздел 3.8.2.2.3.
При использовании поставщика правил сортировки 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');
Дополнительные сведения и примеры синтаксиса правил см. в разделе Раздел 3.8.2.3.4.
Чтобы создать правило сортировки на основе существующего правила сортировки:
CREATE COLLATION german FROM "de_DE";
Это может быть удобно для использования в приложениях имён правил сортировки, не зависящих от операционной системы.
В стандарте SQL есть оператор CREATE COLLATION, но он ограничен копированием существующего правила сортировки. Синтаксис для создания нового правила сортировки является расширением Digital Q.DataBase.