CREATE COLLATION
Эта страница переведена при помощи нейросети GigaChat.
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
- Имя локали для данного правила сортировки.
Если 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
.
DETERMINISTIC
- Указывает, должна ли сортировка использовать детерминированное сравнение. По умолчанию используется значение true. Детерминированное сравнение считает строки, которые не равны побитово, неравными даже в том случае, если они считаются логически равными при сравнении. PostgreSQL устраняет неоднозначности, используя побитовое сравнение. Сравнение, которое не является детерминированным, может сделать сортировку нечувствительной к регистру или акцентам. Для этого нужно выбрать соответствующий параметр
LC_COLLATE
и установить здесь сортировку как недетерминированную.Недетерминированные сопоставления поддерживаются только с поставщиком ICU.
rules
- Определяет дополнительные правила сортировки для настройки поведения правила сортировки. Это поддерживается только для ICU.
version
- Задает строку версии, которую необходимо сохранить с сопоставлением. Обычно это следует опускать, что приведет к вычислению версии из фактической версии сопоставления, предоставляемой операционной системой. Эта опция предназначена для использования для копирования версии из существующей установки.
Смотрите также ALTER COLLATION для того, чтобы узнать, как обрабатывать несовпадения версий сортировки.
existing_collation
- Указывает имя существующей сортировки для копирования. Новая сортировка будет иметь те же свойства, что и существующая, но это будет независимый объект.
Примечания
CREATE COLLATION
берет SHARE ROW EXCLUSIVE
блокировку, которая является самоконфликтной, на pg_collation
системный каталог, поэтому одновременно может выполняться только одна команда CREATE COLLATION
.
Используйте DROP COLLATION
для удаления пользовательских сопоставлений.
Смотрите раздел «Создание новых объектов сопоставления» для получения дополнительной информации о том, как создавать сопоставления.
При использовании провайдера сопоставления с порядком символов 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');
Для создания сопоставления из существующего сопоставления:
CREATE COLLATION german FROM "de_DE";
Это может быть удобно для использования имен сопоставления, независимых от операционной системы, в приложениях.
Совместимость
В стандарте SQL есть CREATE COLLATION
утверждение, но оно ограничено копированием существующей группировки. Синтаксис для создания новой группировки является расширением PostgreSQL.