$ cat /intro

Это учебник по PostgreSQL.
Сначала модель, потом SQL.

Материалы про Postgres обычно делятся на два жанра: SQL-туториалы учат языку, но не системе, а admin-cookbook'и дают рецепты без модели - работает, пока не сломается. Этот учебник занимает нишу между ними: как Postgres устроен внутри.

Процессы и память, страница на диске, кортеж и его системные поля, MVCC, WAL и восстановление, планировщик, индексы, блокировки, репликация. Сначала модель - страница, кортеж, снимок, - потом SQL и эксплуатация, которые из этой модели выводятся.

Отличие от книг Рогова и Suzuki - интерактивность. Не «прочитай про страницу», а открой её через pageinspect и найди в ней свою строку. Postgres - это не чёрный ящик, а процессы, файлы и журнал, которые можно потрогать.

Кому подойдёт

Пререквизит - Linux-база портфеля: процессы и fork, память и page cache, файловая система, fsync. SQL на уровне SELECT и UPDATE - тоже пригодится.

Backend-разработчик
Уверенно пишешь SQL, но не знаешь, что такое `xmin`, почему `UPDATE` плодит мёртвые версии строк и зачем вообще нужен `VACUUM`. Книга достраивает модель под язык, на котором ты уже говоришь.
SRE и DevOps
Держишь Postgres в проде и тушишь инциденты: кончились transaction id, раздулась таблица, отстала реплика. Хочешь понимать причину, а не гуглить симптом по тексту ошибки.
Начинающий DBA
Нужна не зубрёжка параметров, а модель, из которой они выводятся. `shared_buffers` и autovacuum перестают быть магией, когда видишь, на что именно они влияют.
Любопытный системщик
Прошёл Linux-учебник и хочешь увидеть, как `fsync`, page cache и процессная модель работают в настоящей СУБД. Postgres - естественный капстоун системных знаний.

Терминал - незнакомая среда? Начни с LinuxLab: процессы, память и файловая система там разобраны с нуля, и Postgres пойдёт легче.

Почему именно так

Три принципа, на которых держится книга. Если звучат разумно - читаем дальше. Если нет - возможно, тебе нужен справочник команд, а не учебник.

Сначала модель
Большинство материалов начинают с `SELECT … JOIN` или с готовых настроек. Здесь наоборот: сперва страница на диске, кортеж и снимок, и только потом запросы. Когда видишь, где физически лежит строка, MVCC и vacuum перестают быть заклинаниями.
Щупать, а не верить на слово
Каждая глава опирается на эфемерный sandbox с настоящим PostgreSQL. Не «WAL обеспечивает надёжность», а убей кластер `kill -9` и посмотри redo в логе. Не «снимок - это видимость», а открой две сессии и поймай старую версию строки.
Глубина по требованию
У шагов есть необязательные врезки «Копнуть глубже»: история, граничный случай, ссылка на исходники на C. Интересно - разворачиваешь. Хочется быстрее - пропускаешь, а фундамент проверят резюме и вопросы в конце главы.

Что встретится в главе

Шесть повторяющихся элементов. Зная их заранее, тратишь меньше внимания на «что это вообще такое».

Главы
У каждой главы короткое вступление с целью, основной текст с моделью, лаба в sandbox, резюме из пяти-семи тезисов и контрольные вопросы. В конце - мостик в следующую главу. Первый трек бесплатный, остальное по подписке.
Уроки в sandbox
Отдельная вкладка /lessons. Открываешь урок - в браузере поднимается контейнер с PostgreSQL 17, появляется psql, каждый шаг проверяется автоматически. Сеть air-gapped, наружу контейнер не ходит.
Две сессии
MVCC, блокировки и deadlock не понять в одной сессии. Для таких лаб sandbox поднимает две psql-сессии в табах: в одной меняешь данные, в другой смотришь, что видно и что заблокировано.
Врезки
Два типа. «Копнуть глубже» - история и исходники, можно пропустить. «Подводный камень» - типовая ошибка (двойное кэширование, миф «VACUUM возвращает место на диск») и почему она получается; этот тип лучше не пропускать.
Справочник [[slug]]
Двойные квадратные скобки в главах рендерятся как ссылки на статьи в /kb - короткие выжимки по одному понятию: snapshot, xmin/xmax, fillfactor, wraparound. Девять категорий: storage, mvcc, vacuum, buffers-wal, locks, planner, indexes, replication, ops.
Сквозная база
Через всю книгу идёт одно маленькое приложение-блог: `users`, `posts`, `comments`, `tags`. Достаточно мало, чтобы держать в голове, достаточно богато для индексов, join-ов, jsonb и раздувания.

Карта учебника

Одиннадцать частей: от модели хранения к практике эксплуатации. Каждая опирается на предыдущую, но Части I и II - фундамент, без которого остальное держится плохо.

  1. Часть 0

    Карта территории

    Зачем читать про внутренности, как устроены книга и sandbox, что предполагается из Linux-базы. Карта: какую боль закрывает каждая часть.

  2. Часть I

    Хранение данных

    Процессы и память Postgres, кластер на диске ($PGDATA), страница в 8 КБ и кортеж с системными полями xmin, xmax, ctid. pageinspect показывает не пересказ, а сами байты.

  3. Часть II

    Многоверсионность (MVCC)

    Снимок как набор чисел и правило видимости. Уровни изоляции от Read Committed до Serializable. HOT-обновления и почему читатели не блокируют писателей.

  4. Часть III

    Очистка: vacuum, freeze, wraparound

    Мёртвые версии и раздувание, что на самом деле делает VACUUM, заморозка и transaction id wraparound - «судный день» кластера. Тюнинг autovacuum из модели, а не из мифов.

  5. Часть IV

    Буферный кеш и журнал

    shared_buffers и двойное кэширование с page cache ОС. WAL и LSN, контрольная точка, и почему Postgres переживает kill -9: redo от последней контрольной точки.

  6. Часть V

    Блокировки

    Режимы блокировок строк и таблиц, неявные блокировки от DDL, pg_locks. Как возникает и как находится deadlock. Лёгкие и рекомендательные блокировки.

  7. Часть VI

    Планировщик и выполнение

    Путь запроса от parser к executor. Статистика и оценки стоимости, почему оценки врут. Способы доступа и стратегии соединения. Чтение EXPLAIN (ANALYZE, BUFFERS) по узлам.

  8. Часть VII

    Индексы

    B-tree как рабочая лошадка, его страницы через pageinspect. GIN, GiST, BRIN, Hash - под какие данные. Частичные, покрывающие и составные индексы на практике.

  9. Часть VIII

    Репликация

    Физическая репликация: streaming, hot standby, слоты, отставание. Логическая репликация: публикации и подписки. Пулинг соединений и зачем он нужен процессной модели.

  10. Часть IX

    Эксплуатация и анти-паттерны

    Конфигурация, которая правда важна, через призму модели. Расширения для интроспекции. Бэкап, PITR и обновление: логический dump против физического basebackup.

  11. Часть X

    Капстоун

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

Полный список глав с группировкой по частям - на главной курса. Справочник по понятиям - /kb.

С чего начать

Никаких pre-assessment. Выбери, что ближе. Если ошибёшься - мостики внутри глав подскажут вернуться или пройти быстрее.

Чего в книге нет

Границы важнее содержания - чтобы не было ложных ожиданий.

  • Синтаксис SQL с нуля. JOIN, нормальные формы, оконные функции есть в сотне других мест. Здесь предполагается, что SELECT и UPDATE ты уже писал.
  • Готовые рецепты тюнинга без модели. «Поставь shared_buffers = 25% RAM» работает, пока не сломается, а почему - непонятно. Мы выводим настройки из устройства, а не заучиваем.
  • Патчи в ядро Postgres на C. Это следующий уровень и отдельная книга - см. исходники и рассылку pgsql-hackers.
  • Сравнение Postgres с MySQL, Oracle и облачными форками. Берём один движок и копаем его глубоко, а не широко по верхам.

Соседние учебники

PostgreSQL стоит на системном фундаменте. Книга самодостаточна, но если процессы, fsync и page cache - незнакомая территория, рядом лежит остальной портфель той же серии.

LinuxLab - учебник по Linux и сетям. Прямой пререквизит: процессы и fork, сигналы, память и page cache, файловая система. Postgres - капстоун этих знаний.

Git - учебник по Git и GitHub, тоже сначала модель, потом команды. И TerraformLab - Terraform с песочницей на LocalStack.

$ psql -f 00-preface