Перейти к основному содержимому

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.

Смотрите также

ALTER COLLATION, DROP COLLATION