Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Изменяет определение семейства операторов.
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> ] ) ] <function_name> ( <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> | CURRENT_USER | SESSION_USER }
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 не проверяет, содержит ли определение семейства все операторы и функции, требуемые методом индексации, и не проверяет согласованность набора операторов и функций. Пользователь сам несёт ответственность за создание корректного семейства операторов.
Обратите внимание, что синтаксис DROP указывает только «слот» в семействе операторов — по номеру стратегии или номеру вспомогательной функции и типам входных данных. Имя оператора или функции, занимающей этот слот, не указывается. Кроме того, при использовании DROP FUNCTION следует указывать тип(ы) данных, которые функция предназначена поддерживать; для индексов GiST, SP-GiST и GIN это может не иметь отношения к фактическим типам аргументов функции.
Так как механизм индексов не проверяет права доступа к функциям перед их использованием, включение функции или оператора в семейство операторов эквивалентно предоставлению публичного права EXECUTE на них. Обычно это не представляет проблемы для типов функций, полезных в составе семейства операторов.
Операторы не должны быть реализованы через SQL-функции. SQL-функция, скорее всего, будет встроена в вызывающий запрос, что помешает оптимизатору распознать соответствие запроса индексу.
Следующая команда добавляет кросс-типовые операторы и вспомогательные функции в семейство операторов, которое уже содержит классы операторов B-tree для типов данных 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) ;
Оператор ALTER OPERATOR FAMILY отсутствует в стандарте SQL.