Системный каталог, или просто каталог — это таблицы, в которых PostgreSQL хранит информацию обо всех остальных объектах, хранящихся в базе данных. К ним относятся таблицы, функции, триггеры, и т.д. Обращение к системному каталогу происходит часто, поэтому для него предусмотрен кэш. Давайте же разберемся, как этот кэш устроен.
Реализация кэша находится в следующих файлах:
⏩
syscache.{c,h} — реализация основных функций кэша. Функции оперируют с Datum’ами и HeapTuple’ами;⏩
catcache.{c,h} — низкоуровневые функции, используемые syscache.c. Выделение и освобождение памяти реализовано здесь;⏩
lsyscache.{c,h} — высокоуровневая обертка над syscache.c. Содержит функции «получить имя отношения по его Oid» и подобного рода;⏩
inval.{c,h} — логика инвалидации кэша. Подробности см ниже по тексту;⏩
sinvaladt.{c,h} — реализация кольцевого буфера в разделяемой памяти, через который рассылаются сообщения об инвалидации кэшей;⏩
sinval.{c,h} — интерфейс коммуникации через sinvaladt.c. Содержит функции вроде «отправить / получить SharedInvalidationMessage»;📎 Подробнее
@sqlhub

