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. При детерминированном сравнении строки, которые не равны побайтово, считаются разными, даже если они логически эквивалентны согласно правилам сравнения. База данных разрешает коллизии с помощью побайтового сравнения. Недетерминированное сравнение позволяет сделать коллацию, например, нечувствительной к регистру или диакритическим знакам. Для этого нужно выбрать соответствующую настройку LC_COLLATE и установить для коллации значение недетерминированности.
    • Недетерминированные коллации поддерживаются только при использовании поставщика icu.
  • version
    • Указывает строку версии, которая будет сохранена вместе с коллацией. Обычно этот параметр следует опускать, тогда версия будет вычислена на основе фактической версии коллации, предоставляемой операционной системой. Этот параметр предназначен для использования pg_upgrade при копировании версии из существующей установки.
    • Также см. ALTER COLLATION, чтобы узнать, как обрабатывать несоответствия версий коллаций.
  • existing_collation
    • Имя существующей коллации, которую нужно скопировать. Новая коллация будет иметь те же свойства, что и существующая, но станет независимым объектом.

Примечания

Команда CREATE COLLATION устанавливает блокировку SHARE ROW EXCLUSIVE на системный каталог pg_collation, которая конфликтует сама с собой, поэтому одновременно может выполняться только одна команда CREATE COLLATION.

Для удаления пользовательских коллаций используйте команду DROP COLLATION.

Более подробную информацию о поддержке коллаций в Database см. в разделе Collation Support документации PostgreSQL.

При использовании поставщика 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, но он ограничен копированием существующей коллации. Синтаксис создания новой коллации является расширением Database.

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

ALTER COLLATION, DROP COLLATION