Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

CREATE OPERATOR CLASS

Определяет новый класс операторов.

Синтаксис

CREATE OPERATOR CLASS <name> [DEFAULT] FOR TYPE <data_type>
  USING <index_method> [ FAMILY <family_name> ] AS
  { OPERATOR <strategy_number> <operator_name> [ ( <op_type>, <op_type> ) ] [ FOR SEARCH | FOR ORDER BY <sort_family_name> ]
  | FUNCTION <support_number> <funcname> (<argument_type> [, ...] )
  | STORAGE <storage_type>
  } [, ... ]

Описание

Команда CREATE OPERATOR CLASS создает новый класс операторов. Класс операторов определяет, как конкретный тип данных может использоваться с индексом. Класс операторов указывает, какие операторы будут выполнять определенные роли или стратегии для этого типа данных и этого метода индексирования. Класс операторов также задает вспомогательные процедуры, которые будут использоваться методом индексирования, когда класс операторов выбран для столбца индекса. Все операторы и функции, используемые классом операторов, должны быть определены до создания класса операторов. Все функции, используемые для реализации класса операторов, должны быть определены как IMMUTABLE.

В настоящее время CREATE OPERATOR CLASS не проверяет, включает ли определение класса операторов все операторы и функции, требуемые методом индексирования, и образуют ли операторы и функции самосогласованный набор. Определение корректного класса операторов является ответственностью пользователя.

Для создания класса операторов необходимо быть суперпользователем.

Параметры

Параметр Описание

name

Имя создаваемого класса операторов (опционально указанное со схемой). Два класса операторов в одной и той же схеме могут иметь одинаковое имя только в том случае, если они относятся к разным методам индексирования

DEFAULT

Делает класс операторов классом операторов по умолчанию для его типа данных. Для конкретного типа данных и метода индекса по умолчанию может быть не более одного класса операторов

data_type

Тип данных столбца, для которого предназначен этот класс операторов

index_method

Имя метода индексирования, для которого предназначен этот класс операторов. Возможные значения: btree, bitmap и gist

family_name

Имя существующего семейства операторов, в которое следует добавить этот класс операторов. Если не указано, используется семейство с именем, совпадающим с именем класса операторов (при необходимости оно будет создано, если еще не существует)

strategy_number

Операторы, связанные с классом операторов, идентифицируются номерами стратегий, которые служат для определения семантики каждого оператора в контексте его класса операторов. Например, B-деревья накладывают строгий порядок на ключи (от меньшего к большему), поэтому операторы вроде "меньше" и "больше или равно" имеют значение при работе с B-деревом. Эти стратегии можно рассматривать как обобщенные операторы. Каждый класс операторов задает, какой фактический оператор соответствует каждой стратегии для конкретного типа данных и интерпретации семантики индекса. Соответствующие номера стратегий для каждого метода индексирования приведены ниже:

  • меньше: 1

  • меньше или равно: 2

  • равно: 3

  • больше или равно: 4

  • больше: 5

  • строго левее: 1

  • не выходит за правую границу от: 2

  • пересекается: 3

  • не выходит за левую границу от: 4

  • строго правее: 5

  • то же самое: 6

  • содержит: 7

  • содержится в: 8

  • не выходит за верхнюю границу от: 9

  • строго ниже: 10

  • строго выше: 11

  • не выходит за нижнюю границу от: 12

sort_family_name

Имя существующего семейства операторов btree (опционально указанное со схемой), которое описывает порядок сортировки, связанный с оператором упорядочивания. Если не указаны ни FOR SEARCH, ни FOR ORDER BY, по умолчанию используется FOR SEARCH

operator_name

Имя оператора, связанного с классом операторов (опционально указанное со схемой)

op_type

В выражении OPERATOR параметр обозначает типы данных операндов оператора или NONE, чтобы обозначить левый унарный или правый унарный оператор. Типы данных операндов можно опустить в обычном случае, когда они совпадают с типом данных класса операторов. В выражении FUNCTION параметр обозначает типы данных операндов, которые функция предназначена поддерживать, если они отличаются от входных типов данных функции (для функций сравнения B-деревьев и хеш-функций) или от типа данных класса (для функций поддержки сортировки B-деревьев и для всех функций в классах операторов GiST, SP-GiST и GIN). Эти значения по умолчанию являются корректными, поэтому op_type не требуется указывать в секциях FUNCTION, за исключением случая, когда функция поддержки сортировки B-дерева должна поддерживать сравнения между разными типами данных

support_number

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

  • Сравнить два ключа и вернуть целое число меньше ноля, ноль или больше ноля, показывающее, меньше, равно или больше первый ключ по сравнению со вторым: 1.

  • consistent — определить, удовлетворяет ли ключ квалификатору запроса: 1.

  • union — вычислить объединение набора ключей: 2.

  • compress — вычислить сжатое представление ключа или значения, которое будет индексироваться: 3.

  • decompress — вычислить распакованное представление сжатого ключа: 4.

  • penalty — вычислить "штраф" за вставку нового ключа в поддерево с заданным ключом поддерева: 5.

  • picksplit — определить, какие элементы страницы нужно переместить на новую страницу, и вычислить объединяющие ключи для результирующих страниц: 6.

  • equal — сравнить два ключа и вернуть true, если они равны: 7.

funcname

Имя функции (опционально указанное со схемой), которая является вспомогательной процедурой метода индексирования для класса операторов

argument_types

Типы данных параметров функции

storage_type

Тип данных, фактически хранимый в индексе. Обычно он совпадает с типом данных столбца, но некоторые методы индексирования (в настоящее время — GiST и GIN) допускают иной тип. Секцию STORAGE следует опускать, если только метод индекса не допускает использование другого типа

Примечания

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

Операторы не должны быть определены посредством SQL-функций. SQL-функция, скорее всего, будет встроена в вызывающий запрос, что помешает оптимизатору распознать, что запрос соответствует индексу.

Все функции, используемые для реализации класса операторов, должны быть определены как IMMUTABLE.

Greengage DB определяет, является ли оператор индекса "lossy" (с потерями), на лету во время выполнения. Это позволяет более эффективно обрабатывать случаи, когда оператор может быть или не быть "lossy".

Примеры

Следующая команда определяет класс операторов индекса GiST для типа данных _int4 (массив int4). Полный пример см. в contrib-модуле intarray.

CREATE OPERATOR CLASS gist__int_ops
    DEFAULT FOR TYPE _int4 USING gist AS
        OPERATOR 3 &&,
        OPERATOR 6 = (anyarray, anyarray),
        OPERATOR 7 @>,
        OPERATOR 8 <@,
        OPERATOR 20 @@ (_int4, query_int),
        FUNCTION 1 g_int_consistent (internal, _int4, int, oid, internal),
        FUNCTION 2 g_int_union (internal, internal),
        FUNCTION 3 g_int_compress (internal),
        FUNCTION 4 g_int_decompress (internal),
        FUNCTION 5 g_int_penalty (internal, internal, internal),
        FUNCTION 6 g_int_picksplit (internal, internal),
        FUNCTION 7 g_int_same (_int4, _int4, internal);

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

CREATE OPERATOR CLASS является расширением Greengage DB. В стандарте SQL нет оператора CREATE OPERATOR CLASS.

См. также