CREATE COLLATION#

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 FROM existing_collation

Описание

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

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

Параметры

IF NOT EXISTS

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

name

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

locale

Имя локали для этого правила сортировки. См. Раздел 22.2.2.3.1 и Раздел 22.2.2.3.2 для подробностей.

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

lc_collate

Если providerlibc, используйте указанную локаль операционной системы для категории локали LC_COLLATE.

lc_ctype

Если providerlibc, используйте указанную локаль операционной системы для категории локали 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.