CREATE COLLATION#
CREATE COLLATION
CREATE COLLATION — определить новое правила сортировки
Синтаксис
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
FROMexisting_collation
Описание
CREATE COLLATION
определяет новое правило сортировки с использованием указанных настроек локали операционной системы или путем копирования существующего правила сортировки.
Чтобы иметь возможность создать правило сортировки, необходимо иметь привилегию CREATE
на целевой схеме.
Параметры
IF NOT EXISTS
Не генерировать ошибку, если существует правило сортировки с таким же именем. В этом случае будет выдано уведомление. Обратите внимание, что не гарантируется, что существующее правило сортировки будет похожа на ту, которая была бы создана.
name
Имя правила сортировки. Имя правила сортировки может быть указано с указанием схемы. Если это не указано, правило сортировки определено в текущей схеме. Имя правила сортировки должно быть уникальным в пределах этой схемы. (Системные каталоги могут содержать правила сортировки с тем же именем для других кодировок, но они игнорируются, если кодировка базы данных не совпадает).
locale
Это является сокращением для установки параметров
LC_COLLATE
иLC_CTYPE
одновременно. Если вы указываете это, вы не можете указывать ни один из этих параметров.lc_collate
Используйте указанную локаль операционной системы для категории локали
LC_COLLATE
.lc_ctype
Используйте указанную локаль операционной системы для категории локали
LC_CTYPE
.provider
Указывает провайдера, который будет использоваться для локализованных служб, связанных с этим правилом сортировки. Возможные значения:
icu
,libc
.libc
- это значение по умолчанию. Доступные варианты зависят от операционной системы и параметров сборки.DETERMINISTIC
Указывает, следует ли использовать детерминированные сравнения для сортировки. По умолчанию значение true. Детерминированное сравнение считает строки, которые не равны побайтово, неравными, даже если они логически равны по сравнению. PostgreSQL разрешает такие случаи с помощью побайтового сравнения. Недетерминированное сравнение может сделать сортировку, например, нечувствительной к регистру или акцентам. Для этого необходимо выбрать соответствующую настройку
LOCALE
и установить здесь недетерминированную сортировку.Недетерминированные правила сортировки поддерживаются только с помощью провайдера ICU.
version
Указывает строку версии, которую следует сохранить с правилом сортировки. Обычно этот параметр должен быть не указан, что приведет к вычислению версии на основе фактической версии правила сортировки, предоставленной операционной системой. Этот параметр предназначен для использования командой
pg_upgrade
для копирования версии из существующей установки.См. также ALTER COLLATION для обработки несоответствий версий правил сортировки.
existing_collation
Имя существующего правила сортировки для копирования. Новое правило сортировки будет иметь те же свойства, что и существующая, но будет независимым объектом.
Примечания
CREATE COLLATION
занимает SHARE ROW
EXCLUSIVE
блокировку, которая конфликтует сама с собой, на
системном каталоге pg_collation
, поэтому только одна
команда CREATE COLLATION
может выполняться одновременно.
Используйте DROP COLLATION
для удаления пользовательских сортировок.
См. Раздел 23.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');
Для создания правила сортировки на основе существующего правила сортировки:
CREATE COLLATION german FROM "de_DE";
Это может быть удобно, чтобы иметь возможность использовать в приложениях имена правила сортировки, не зависящие от операционной системы.
Совместимость
В стандарте SQL есть оператор CREATE COLLATION
, но он ограничен копированием существующего правила сортировки. Синтаксис для создания нового правила сортировки является расширением Tantor SE.