PostgreSQL для тех, кто пишет на Go
Ты — новый бэкенд-разработчик Brew, вымышленной сети кофеен. Практический курс по PostgreSQL 18 для разработчиков приложений на Go: от первого подключения и типов данных до индексов, MVCC, JSONB, оконных функций и серверной логики — и капстонов с outbox/CDC. Одна модель данных проходит весь курс; финал — ты сам открываешь PUBLICATION и передаёшь поток изменений Brew в соседний kafka-cookbook. SQL пишется руками, типизируется через sqlc, весь код запускается на локальном sandbox (postgres:18 + Adminer) и оставляет наблюдаемый эффект — это рабочие сценарии, а не лекции «на доске».
Программа курса
- 01
Подключение и ориентация
Старт курса: кто ты, что за Brew и что мы построим (вводный урок-карта), затем первый технический слой — клиент-сервер, локальный sandbox (postgres:18 + Adminer), psql как рабочий инструмент, подключение из Go через pgxpool и типизированные запросы через sqlc. После этого модуля есть рабочий конвейер «SQL руками → sqlc generate → типизированный pgx-код», на который опираются все остальные темы.
не начатов процессепройдено0/66 уроков2 ч 10 мин - 02
Типы данных
Какой тип выбрать и почему: numeric vs float для денег, text/boolean/null, timestamptz для времени, uuid и PG18 uuidv7, enum/массивы и введение в jsonb. Правильный тип на старте снимает целый класс багов на проде.
не начатов процессепройдено0/55 уроков1 ч 55 мин - 03
Схема
Identity vs serial, NOT NULL, первичные и внешние ключи, UNIQUE/CHECK, генерируемые столбцы и домены (PG18 virtual vs stored), и мышление миграций — какие ALTER мгновенны, а какие переписывают таблицу и блокируют запись.
не начатов процессепройдено0/66 уроков2 ч 15 мин - 04
CRUD-беглость
Уверенный CRUD: INSERT ... RETURNING, SELECT с WHERE/ORDER/LIMIT и keyset-пагинация, безопасные UPDATE/DELETE, upsert через ON CONFLICT, PG18 RETURNING old/new и трезвая семантика NULL (ловушка NOT IN + NULL, COALESCE/NULLIF/IS DISTINCT FROM).
не начатов процессепройдено0/66 уроков2 ч 15 мин - 05
Запросы по таблицам
Связываем данные: join'ы (inner/left/right/full), self-join'ы, агрегация GROUP BY/HAVING, DISTINCT ON (последний заказ на клиента), подзапросы EXISTS vs IN и CTE с материализацией. Здесь данные превращаются в ответы на вопросы бизнеса.
не начатов процессепройдено0/66 уроков2 ч 25 мин - 06
Транзакции
Как Postgres ведёт себя под конкурентной нагрузкой: ACID и транзакции, ментальная модель MVCC (видимые xmin/xmax), блокировки строк и потерянные обновления, уровни изоляции на практике, ретраи на 40001 и дедлоки с advisory-локами.
не начатов процессепройдено0/66 уроков2 ч 25 мин - 07
Индексы и EXPLAIN
Производительность через чтение планов: EXPLAIN ANALYZE с buffers (в PG18 по умолчанию), B-tree и порядок столбцов (PG18 skip-scan), когда индексы не помогают (expression index), partial/covering/unique и Index-Only Scan, GIN для jsonb/массивов, CREATE INDEX CONCURRENTLY.
не начатов процессепройдено0/66 уроков2 ч 20 мин - 08
JSONB, массивы и поиск
Полуструктурированные данные и поиск внутри БД: доступ и containment в jsonb (-> ->> @> ?), когда jsonb не нужен, SQL/JSON path и сборка, массивы vs junction-таблица, полнотекстовый поиск (tsvector + GIN) и нечёткий поиск через pg_trgm — с матрицей выбора FTS/trgm/движок.
не начатов процессепройдено0/66 уроков2 ч 20 мин - 09
Аналитика
Аналитика прямо в SQL: оконные функции (running total, ранжирование, top-N на группу), lag/lead и фреймы (day-over-day, скользящее среднее), рекурсивные CTE (дерево категорий), LATERAL-join'ы (top-3 на клиента — убийца N+1) и grouping sets/rollup/cube.
не начатов процессепройдено0/66 уроков2 ч 25 мин - 10
Запись
Продвинутая запись и логика на стороне БД: MERGE и COPY, очередь задач через SKIP LOCKED, transactional outbox, LISTEN/NOTIFY, триггеры и волатильность функций (IMMUTABLE/STABLE/ VOLATILE) — с явной секцией «когда НЕ класть логику в БД».
не начатов процессепройдено0/55 уроков2 ч - 11
Use cases
Сквозные капстоны с integration-тестами, связывающие весь курс в работающие приложения: сборка схемы Brew, движок цен и промо (PG18 temporal), клиника анти-паттернов приложения, пулинг из приложения (pgbouncer caveats) и CDC-шов — байт-совместимый handoff в kafka-cookbook.
не начатов процессепройдено0/55 уроков2 ч 55 мин