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, ]
    [ VERSION = version ]
)
CREATE COLLATION [ IF NOT EXISTS ] name FROM existing_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.