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