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

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, ]
[ 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

Задает строку версии, которую необходимо сохранить с сопоставлением. Обычно это следует опускать, что приведет к вычислению версии из фактической версии сопоставления, предоставляемой операционной системой. Эта опция предназначена для использования для копирования версии из существующей установки.

Смотрите также 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');

Для создания сопоставления из существующего сопоставления:

CREATE COLLATION german FROM "de_DE";

Это может быть удобно для использования имен сопоставления, независимых от операционной системы, в приложениях.

Совместимость

В стандарте SQL есть CREATE COLLATION утверждение, но оно ограничено копированием существующей группировки. Синтаксис для создания новой группировки является расширением PostgreSQL.

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

ALTER COLLATION, DROP COLLATION