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

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

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

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

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

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

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

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

2.8.10. Классы операторов и семейства операторов

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

CREATE INDEX имя ON таблица (столбец opclass [ ( opclass_options ) ] [параметры сортировки] [, ...]);

Класс операторов определяет набор операторов, которые будут использоваться индексом для конкретного столбца. Например, индекс B-дерево для типа int4 будет использовать int4_ops класс; данный класс операторов включает функции сравнения для значений типа int4. На практике обычно достаточно класса операторов по умолчанию для типа данных столбца. Основная причина существования классов операторов заключается в том, что для некоторых типов данных может быть предусмотрено несколько вариантов поведения индекса. Например, может потребоваться отсортировать данные типа комплексных чисел либо по абсолютному значению, либо по действительной части. Это можно реализовать, определив два класса операторов для этого типа данных и выбрав соответствующий класс при создании индекса. Класс операторов определяет базовый порядок сортировки (который затем можно изменить, добавив параметры сортировки COLLATE, ASC/DESC и (или) NULLS FIRST/NULLS LAST).

Помимо классов по умолчанию, существуют также некоторые встроенные классы операторов:

  • Классы операторов text_pattern_ops, varchar_pattern_ops, и bpchar_pattern_ops поддерживают индексы B-дерево для типов text, varchar, и char соответственно. Основное отличие от классов операторов по умолчанию заключается в том, что значения сравниваются строго посимвольно, а не в соответствии с правилами сортировки конкретной локали. Благодаря этому данные классы операторов подходят для использования в запросах с выражениями сопоставления по шаблону (LIKE или регулярные выражения POSIX), когда база данных не использует стандартный «C» локаль. В качестве примера можно создать индекс для varchar столбца следующим образом:

    CREATE INDEX test_index ON test_table (col varchar_pattern_ops);
    

    Обратите внимание, что также следует создать индекс с классом операторов по умолчанию, если планируется использовать индекс в запросах с обычными операторами <, <=, >, или >= сравнения для использования индекса. Такие запросы не могут использовать xxx_pattern_ops классы операторов. (Однако для обычных сравнений на равенство можно использовать эти классы операторов.) Допускается создание нескольких индексов для одного и того же столбца с различными классами операторов. Если используется локаль C, нет необходимости в применении xxx_pattern_ops классов операторов, так как индекс с классом операторов по умолчанию подходит для запросов с сопоставлением по шаблону в локали C.

Следующий запрос выводит все определенные классы операторов:

SELECT am.amname AS index_method,
       opc.opcname AS opclass_name,
       opc.opcintype::regtype AS indexed_type,
       opc.opcdefault AS is_default
    FROM pg_am am, pg_opclass opc
    WHERE opc.opcmethod = am.oid
    ORDER BY index_method, opclass_name;

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

Данная расширенная версия предыдущего запроса позволяет увидеть семейство операторов, к которому относится каждый класс операторов:

SELECT am.amname AS index_method,
       opc.opcname AS opclass_name,
       opf.opfname AS имя семейства операторов opfamily_name,
       opc.opcintype::regtype AS indexed_type,
       opc.opcdefault AS is_default
    FROM pg_am am, pg_opclass opc, pg_opfamily opf
    WHERE opc.opcmethod = am.oid AND
          opc.opcfamily = opf.oid
    ORDER BY метод_индекса, имя_класса_операторов;

Данный запрос выводит все определенные семейства операторов и все операторы, входящие в каждое семейство:

SELECT am.amname AS index_method,
       opf.opfname AS имя семейства операторов opfamily_name,
       amop.amopopr::regoperator AS opfamily_operator
    FROM pg_am am, pg_opfamily opf, pg_amop amop
    WHERE opf.opfmethod = am.oid AND
          amop.amopfamily = opf.oid
    ORDER BY index_method, opfamily_name, opfamily_operator;

Подсказка

psql содержит команды \dAc, \dAf, и \dAo, которые предоставляют несколько более сложные версии этих запросов.

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

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