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