51.4. pg_amop
В каталоге pg_amop
хранится информация об операторах, связанных с семействами операторов методов доступа. Каждая строка в нём описывает оператор, являющийся членом семейства операторов. Членом семейства может быть либо оператор поиска, либо оператор упорядочивания. Оператор может относиться к нескольким семействам, но он не может находиться в одном семействе в более чем одной позиции поиска или позиции упорядочивания. (Допустимо, хотя и маловероятно, что оператор будет использоваться и для поиска, и для упорядочивания.)
Таблица 51.4. Столбцы pg_amop
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
amopfamily | oid |
| Семейство операторов, к которому относится эта запись |
amoplefttype | oid |
| Тип данных левого операнда оператора |
amoprighttype | oid |
| Тип данных правого операнда оператора |
amopstrategy | int2 | Номер стратегии оператора | |
amoppurpose | char | Предназначение оператора: s — поиск (search), o — упорядочивание (ordering) | |
amopopr | oid |
| OID оператора |
amopmethod | oid |
| Индексный метод доступа, для которого предназначено семейство операторов |
amopsortfamily | oid |
| Семейство операторов B-дерева, в соответствии с которым сортирует данный оператор, если это оператор упорядочивания; ноль, если это оператор поиска |
Запись оператора «поиска» указывает, что по индексу этого семейства операторов можно производить поиск и найти все строки, удовлетворяющие условию WHERE
столбец_индекса
оператор
константа
. Очевидно, такой оператор должен возвращать тип boolean
, а тип его левого операнда должен соответствовать типу данных столбца индекса.
Запись оператора «упорядочивания» указывает, что по индексу этого семейства операторов можно провести сканирование и получить строки в порядке, заданном предложением ORDER BY
столбец_индекса
оператор
константа
. Такой оператор может возвращать любой сортируемый тип данных, хотя тип левого операнда должен так же соответствовать типу данных столбца индекса. Точная семантика ORDER BY
определяется столбцом amopsortfamily
, который должна указывать на семейство операторов B-дерева для типа, возвращаемого оператором.
Примечание
В настоящее время предполагается, что порядком сортировки для упорядочивающего оператора будет порядок по умолчанию для соответствующего семейства операторов, то есть, ASC NULLS LAST
. Когда-нибудь для большей гибкости могут быть добавлены дополнительные столбцы, позволяющие явно задавать параметры сортировки.
Поле amopmethod
в записи оператора должно соответствовать полю opfmethod
содержащего его семейства (amopmethod
добавлен сюда намеренно, эта денормализация структуры каталога объясняется соображениями производительности). Также, поля amoplefttype
и amoprighttype
должны соответствовать полям oprleft
и oprright
в записи pg_operator
, на которую ссылается данная.