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

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

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

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

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

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

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

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

5.4.1. Дерево запроса

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

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

Что же представляет собой дерево запроса? Это внутреннее представление оператора SQL SQL, в котором отдельные составляющие его части хранятся по отдельности. Эти деревья запросов могут быть отображены в журнале сервера, если задать параметры конфигурации debug_print_parse, debug_print_rewritten, или debug_print_plan. Действия правил также хранятся в виде деревьев запросов в системном каталоге pg_rewrite. Они не отформатированы так, как вывод в журнале, но содержат точно такую же информацию.

Чтение необработанного дерева запроса требует определенного опыта. Но так как SQL представлений деревьев запросов достаточно для понимания системы правил, в данной главе не рассматривается порядок их чтения.

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

тип команды

Это простое значение, указывающее, какая именно команда (SELECT, INSERT, UPDATE, DELETE) сформировала дерево запроса.

таблица отношений

Таблица отношений представляет собой список отношений, используемых в запросе. В SELECT операторе это те отношения, которые указаны после ключевого слова FROM ключевое слово.

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

результирующее отношение

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

SELECT запросы не имеют результирующего отношения. (Особый случай SELECT INTO это почти идентичен CREATE TABLE за которым следует INSERT ... SELECT, и не рассматривается здесь отдельно.)

Для INSERT, UPDATE, и DELETE команд результирующим отношением является таблица (или представление!), в котором должны быть произведены изменения.

целевой список

Целевой список представляет собой список выражений, определяющих результат запроса. В случае SELECT, именно эти выражения формируют окончательный результат запроса. Они соответствуют выражениям между ключевыми словами SELECT и FROM. (* является лишь сокращением для всех имен столбцов отношения. Оно развертывается анализатором в отдельные столбцы, поэтому система правил никогда его не видит.)

DELETE командам не требуется обычный целевой список, поскольку они не возвращают результат. Вместо этого планировщик добавляет специальный CTID элемент в пустой целевой список, чтобы позволить исполнителю найти строку, подлежащую удалению. (CTID добавляется в тех случаях, когда результирующее отношение является обычной таблицей. Если это представление, то вместо этого система правил добавляет переменную всей строки, как описано в разделе, посвященном Раздел 5.4.2.4.)

Для INSERT командах целевой список описывает новые строки, которые должны быть помещены в результирующее отношение. Он состоит из выражений в предложении VALUES фразы или те элементы, которые взяты из SELECT фразы в INSERT ... SELECT. На первом этапе процесса переписывания в целевой список добавляются элементы для всех столбцов, значения которых не были явно заданы в исходной команде, но для которых определены значения по умолчанию. Все остальные столбцы (для которых не указано ни фактическое значение, ни значение по умолчанию) будут дополнены планировщиком константным выражением NULL.

Для UPDATE команд целевой список описывает новые строки, которые должны заменить старые. В системе правил он содержит только выражения из SET column = expression команды. Планировщик обработает отсутствующие столбцы, вставив выражения, которые копируют значения из старой строки в новую. Так же, как и для DELETE, а CTID или переменная всей строки добавляется для того, чтобы исполнитель мог идентифицировать старую строку для обновления.

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

условие (qualification)

Условие запроса представляет собой выражение, во многом похожее на те, что содержатся в записях целевого списка. Результирующее значение этого выражения имеет логический тип, определяющий, должна ли операция (INSERT, UPDATE, DELETE, или SELECT) для итоговой строки результата быть выполнена или нет. Оно соответствует WHERE предложению в SQL операторе.

дерево соединений

Дерево соединений запроса отображает структуру FROM предложения. Для такого простого запроса, как SELECT ... FROM a, b, c, дерево соединений представляет собой просто список FROM элементов, поскольку их можно соединять в любом порядке. Но когда JOIN выражения, в частности внешние соединения, используются, соединения должны выполняться в порядке, указанном в этих выражениях. В этом случае дерево соединений показывает структуру JOIN выражений. Ограничения, связанные с конкретными JOIN предложениями (из ON или USING выражения) сохраняются как выражения условий, прикреплённые к соответствующим узлам дерева соединений. Оказывается удобным хранить верхнего уровня WHERE выражение в виде условия, прикреплённого к элементу дерева соединений верхнего уровня. Таким образом, дерево соединений фактически представляет как FROM и WHERE фразы SELECT.

остальные

Другие части дерева запроса, такие как ORDER BY предложение, здесь не рассматриваются. Система правил заменяет в них некоторые записи при применении правил, но это не имеет прямого отношения к принципам работы системы правил.

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

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