Перейти к основному содержимому

Определение интерфейса для индексных методов доступа

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

Все индексы в PostgreSQL технически называются вторичными индексами; то есть индекс физически отделен от файла таблицы, которую он описывает. Каждый индекс хранится как собственное физическое отношение и описывается записью в каталоге pg_class. Содержимое индекса полностью контролируется его методом доступа к индексу. На практике все методы доступа к индексам делят индексы на страницы стандартного размера, чтобы они могли использовать обычный менеджер хранения и менеджер буферов для доступа к содержимому индекса. (Кроме того, все существующие методы доступа к индексам используют стандартное расположение страниц, описанное в разделе «Макет страницы базы данных», и большинство из них используют одинаковый формат заголовков кортежей индексов; но эти решения не являются принудительными для метода доступа).

Индекс - это фактически отображение некоторых значений ключей данных на идентификаторы кортежей, или TID, версий строк (кортежей) в родительской таблице индекса. TID состоит из номера блока и номера элемента в этом блоке (см. раздел «Макет страницы базы данных»). Этой информации достаточно для получения конкретной версии строки из таблицы. Индексы не знают, что в MVCC может существовать несколько версий одной и той же логической строки; для индекса каждый кортеж - это независимый объект, которому нужна своя собственная запись в индексе. Таким образом, при обновлении строки всегда создаются все новые записи индекса для этой строки, даже если значения ключей не изменились. (Исключением из этого утверждения являются кортежи HOT, но с ними индексы тоже не работают). Индексные записи для мертвых кортежей восстанавливаются (с помощью пылесоса), когда восстанавливаются сами мертвые кортежи.