Исход из России западных ИТ-вендоров сильно сузил рынок СУБД корпоративного класса — выход нашелся в лице PostgreSQL, и сегодня крупнейшие финансовые и промышленные отечественные корпорации мигрировали на эту СУБД, не дожидаясь, пока импортные продукты «превратятся в тыкву». Однако сопровождать решение, следить за развитием СУБД и обеспечивать гарантированную надежность системного открытого кода — нетипичная для корпораций задача. В случае с PostgreSQL ее решает компания Postgres Professional, отвечающая в России за СУБД Postgres Pro, включенную в Единый реестр российского программного обеспечения и предлагаемую отечественным пользователям в трех версиях: Postgres Pro Standard, Enterprise и имеющей сертификат ФСТЭК Postgres Pro Certified.

Несмотря на то, что архитектуры всех реляционных баз данных примерно одинаковы, а открытый код доступен любому желающему, миграция с зарубежных систем, перенос данных и адаптация к корпоративному ИТ-ландшафту далеко не всегда могут пройти безболезненно. Ее автор — Егор Рогов, директор по разработке образовательных программ компании Postgres Professional.

В книге рассматривается внутреннее устройство СУБД PostgreSQL: детали реализации многоверсионности и изоляции на основе снимков данных, включая процедуру очистки неактуальных версий строк; буферный кэш и журнал предзаписи; использование блокировок различных уровней; планирование и выполнение SQL-запросов; принципы расширяемости и особенности имеющихся индексных методов доступа. Большое внимание уделяется возможностям, предоставляемым для самостоятельного изучения механизмов функционирования PostgreSQL.

Книга состоит из пяти частей, объединяющих 29 глав.

Во вводной главе без излишней детализации обсуждаются основные понятия, на которые опирается дальнейшее повествование книги: организация данных; процессы и память; клиенты и клиент-серверный протокол.

Первая часть книги посвящена вопросам согласованности и изоляции, которые сначала рассматриваются с точки зрения пользователя (какие существуют уровни изоляции и что это означает), а затем внутреннего устройства. Для этого автор погружается в особенности реализации многоверсионности и изоляции на основе снимков данных. Основной акцент сделан на процедуре очистки неактуальных версий строк.

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

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

Четвертая часть разъясняет особенности планирования и выполнения сервером SQL-запросов. Рассказывается, какие имеются способы доступа к данным, какие применяются методы соединения и как используется статистическая информация.

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

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

В книге много фрагментов кода, в основном на SQL, что делает ее особенно информативной для администраторов программистов.

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

 

Но эта книга и не учебник, да и на звание справочника она тоже не претендует.

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

Книга будет полезной тем, кто уже хорошо знаком с устройством других реляционных СУБД, но мигрирует на PostgreSQL и хочет разобраться в отличиях. Сам автор признается: «Несколько лет назад такая книга сэкономила бы мне много времени. Большая часть содержащихся в книге сведений будет актуальна еще относительно долго, хотя отдельные детали устаревают быстро. Обдумывайте, экспериментируйте, проверяйте. В PostgreSQL для этого есть все инструменты, и я старался показать, как ими пользоваться».

Рогов Е. В. PostgreSQL 15 изнутри. — М.: ДМК Пресс, 2023. — 662 с. ISBN 978-5-93700-178-8 (ДМК Пресс); ISBN 978-5-6045970-2-6 (Постгрес Профессиональный, электронное издание)

10.51793/OS.2023.93.28.001