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

ALTER OPERATOR FAMILY

Изменяет определение семейства операторов.

Синтаксис

ALTER OPERATOR FAMILY <name> USING <index_method> ADD
  {  OPERATOR <strategy_number> <operator_name> ( <op_type>, <op_type> ) [ FOR SEARCH | FOR ORDER BY <sort_family_name> ]
    | FUNCTION <support_number> [ ( <op_type> [ , <op_type> ] ) ] <funcname> ( <argument_type> [, ...] )
  } [, ... ]

ALTER OPERATOR FAMILY <name> USING <index_method> DROP
  {  OPERATOR <strategy_number> ( <op_type>, <op_type> )
    | FUNCTION <support_number> [ ( <op_type> [ , <op_type> ] ) ]
  } [, ... ]

ALTER OPERATOR FAMILY <name> USING <index_method> RENAME TO <new_name>

ALTER OPERATOR FAMILY <name> USING <index_method> OWNER TO <new_owner>

ALTER OPERATOR FAMILY <name> USING <index_method> SET SCHEMA <new_schema>

Описание

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

Когда операторы и вспомогательные функции добавляются в семейство с помощью ALTER OPERATOR FAMILY, они не являются частью какого-либо конкретного класса операторов внутри семейства, а просто "свободно" находятся внутри семейства. Это означает, что эти операторы и функции совместимы с семантикой семейства, но не требуются для правильного функционирования какого-либо конкретного индекса. Если такие операторы и функции необходимы, они должны быть объявлены как часть класса операторов; см. CREATE OPERATOR CLASS. Вы можете удалить "свободных" членов семейства из семейства в любое время, но члены класса операторов не могут быть удалены без удаления всего класса и любых индексов, зависящих от него. Обычно операторы и функции с одним типом данных являются частью классов операторов, потому что они необходимы для поддержки индекса по этому конкретному типу данных, в то время как операторы и функции перекрестных типов данных делаются "свободными" членами семейства.

Вы должны быть суперпользователем, чтобы использовать ALTER OPERATOR FAMILY. Это ограничение сделано потому, что ошибочное определение семейства операторов может привести к проблемам на сервере.

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

Выражения OPERATOR и FUNCTION могут появляться в любом порядке.

Параметры

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

name

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

index_method

Имя метода индексирования, для которого предназначено это семейство операторов

strategy_number

Номер стратегии метода индексирования для оператора, связанного с семейством операторов

operator_name

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

op_type

В выражении OPERATOR — типы данных операндов оператора или NONE, чтобы обозначить левый унарный или правый унарный оператор. В отличие от аналогичного синтаксиса в CREATE OPERATOR CLASS, типы данных операндов всегда должны быть указаны. В выражении ADD FUNCTION — типы данных операндов, которые функция предназначена поддерживать, если они отличаются от входных типов данных функции. Для функций сравнения B-дерева нет необходимости указывать op_type, так как входные типы данных функции всегда являются правильными для использования. Для функций поддержки сортировки B-дерева и всех функций в классах операторов GiST, SP-GiST и GIN необходимо указать типы данных операндов, с которыми должна использоваться функция

sort_family_name

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

support_number

Номер вспомогательной процедуры метода индексирования для функции, связанной с семейством операторов

funcname

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

argument_types

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

new_name

Новое имя семейства операторов

new_owner

Новый владелец семейства операторов

new_schema

Новая схема для семейства операторов

Примечания

Обратите внимание, что синтаксис DROP указывает только "слот" в семействе операторов по номеру стратегии или поддержки и типам входных данных. Имя оператора или функции, занимающей слот, не упоминается. Также для DROP FUNCTION указываемые типы — это типы входных данных, которые функция должна поддерживать; для индексов GiST, SP_GiST и GIN эти типы могут не иметь никакого отношения к фактическим типам входных аргументов самой функции.

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

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

До Greenplum Database DB 6.0 выражение OPERATOR могло включать опцию RECHECK. Эта опция больше не поддерживается. Greengage DB теперь определяет, является ли оператор индекса "lossy" (с потерями), на лету во время выполнения. Это позволяет более эффективно обрабатывать случаи, когда оператор может быть или не быть "lossy".

Примеры

Следующая команда добавляет операторы и вспомогательные функции перекрестных типов данных в семейство операторов, которое уже содержит классы операторов B-дерева для типов данных int4 и int2:

ALTER OPERATOR FAMILY integer_ops USING btree ADD

    -- int4 vs int2
    OPERATOR 1 < (int4, int2),
    OPERATOR 2 <= (int4, int2),
    OPERATOR 3 = (int4, int2),
    OPERATOR 4 >= (int4, int2),
    OPERATOR 5 > (int4, int2),
    FUNCTION 1 btint42cmp(int4, int2),

    -- int2 vs int4
    OPERATOR 1 < (int2, int4),
    OPERATOR 2 <= (int2, int4),
    OPERATOR 3 = (int2, int4),
    OPERATOR 4 >= (int2, int4),
    OPERATOR 5 > (int2, int4),
    FUNCTION 1 btint24cmp(int2, int4);

Чтобы удалить эти записи, выполните:

ALTER OPERATOR FAMILY integer_ops USING btree DROP

    -- int4 vs int2
    OPERATOR 1 (int4, int2),
    OPERATOR 2 (int4, int2),
    OPERATOR 3 (int4, int2),
    OPERATOR 4 (int4, int2),
    OPERATOR 5 (int4, int2),
    FUNCTION 1 (int4, int2),

    -- int2 vs int4
    OPERATOR 1 (int2, int4),
    OPERATOR 2 (int2, int4),
    OPERATOR 3 (int2, int4),
    OPERATOR 4 (int2, int4),
    OPERATOR 5 (int2, int4),
    FUNCTION 1 (int2, int4);

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

В стандарте SQL нет команды ALTER OPERATOR FAMILY.

См. также