×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

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

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

6.1.20. ALTER OPERATOR FAMILY

6.1.20. ALTER OPERATOR FAMILY

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 ] ) ]
              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_ROLE | CURRENT_USER | SESSION_USER }

ALTER OPERATOR FAMILY name USING index_method
    SET SCHEMA new_schema

Описание

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

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

Для использования ALTER OPERATOR FAMILY необходимо быть суперпользователем. (Это ограничение введено, потому что ошибочное определение семейства операторов может привести к путанице или даже к аварийному завершению сервера.)

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

Дополнительную информацию см. в Раздел 5.1.16.

Параметры

name

Имя (возможно, с указанием схемы) существующего семейства операторов.

index_method

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

strategy_number

Стратегический номер оператора в методе индексирования, связанный с семейством операторов.

operator_name

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

op_type

В предложении OPERATOR — тип(ы) данных операндов оператора, или NONE для обозначения префиксного оператора. В отличие от аналогичного синтаксиса в команде CREATE OPERATOR CLASS, тип(ы) данных операндов должны быть указаны всегда.

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

В предложении DROP FUNCTION необходимо указать тип(ы) данных операндов, которые функция предназначена поддерживать.

sort_family_name

Имя (возможно, с указанием схемы) существующего семейства операторов btree, описывающего порядок сортировки, связанный с оператором упорядочивания.

Если ни FOR SEARCH, ни FOR ORDER BY не указаны, по умолчанию используется FOR SEARCH.

support_number

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

function_name

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

argument_type

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

new_name

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

new_owner

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

new_schema

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

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

Примечания

Обратите внимание, что синтаксис DROP указывает только «слот» в семействе операторов, по стратегическому или вспомогательному номеру и входному(ым) типу(ам) данных. Имя оператора или функции, занимающей слот, не указывается. Кроме того, для DROP FUNCTION тип(ы) данных, которые нужно указать, — это входной(ые) тип(ы) данных, которые функция предназначена поддерживать; для индексов GiST, SP-GiST и GIN они могут не иметь ничего общего с фактическими типами входных аргументов функции.

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

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

До Digital Q.DataBase 8.4 предложение OPERATOR могло включать опцию RECHECK. Сейчас она больше не поддерживается, потому что то, является ли индексный оператор «неточным», теперь определяется динамически во время выполнения. Это позволяет эффективно обрабатывать случаи, когда оператор может быть как точным, так и неточным.

Примеры

Следующая примерная команда добавляет операторы и вспомогательные функции для разных типов данных в семейство операторов, которое уже содержит классы операторов 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.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению