Карта курса SQL & PostgreSQL


Введение

Привет!
Это курс для тех, кто хочет глубоко разобраться в SQL и PostgreSQL — от базовых запросов до оптимизации, транзакций и архитектуры — и уверенно применять эти знания в реальных продакшн-системах и на собеседованиях уровня Middle+ / Senior.

Меня зовут Виктор Анохин. Я занимаюсь бэкенд-разработкой и проектированием баз данных, а также регулярно провожу технические собеседования. В этом курсе я собрал практический опыт — от повседневного production-кода до разбора типичных ошибок кандидатов и архитектурных решений, которые действительно работают под нагрузкой.
Визуальный роадмап для изучения. Отмечай прогресс!
Обзор структуры
┌─────────────────────────────────────────────────────────────────────────┐
│                           КАРТА КУРСА                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│   УРОВЕНЬ 1: ОСНОВЫ                                                     │
│   ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐                │
│   │ SELECT  │ → │  WHERE  │ → │  JOIN   │ → │ GROUP BY│                │
│   │ FROM    │   │  ORDER  │   │  LEFT   │   │ HAVING  │                │
│   └─────────┘   └─────────┘   └─────────┘   └─────────┘                │
│        ↓                                                                │
│   УРОВЕНЬ 2: ПРОДВИНУТЫЙ SQL                                           │
│   ┌─────────┐   ┌─────────┐   ┌─────────┐                              │
│   │Подзапросы│ → │  CTE    │ → │ Оконные │                              │
│   │         │   │  WITH   │   │ функции │                              │
│   └─────────┘   └─────────┘   └─────────┘                              │
│        ↓                                                                │
│   УРОВЕНЬ 3: АРХИТЕКТУРА                                               │
│   ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐                │
│   │Транзакции│ → │  MVCC   │ → │Индексы  │ → │EXPLAIN  │                │
│   │  ACID   │   │         │   │ B-Tree  │   │ ANALYZE │                │
│   └─────────┘   └─────────┘   └─────────┘   └─────────┘                │
│        ↓                                                                │
│   УРОВЕНЬ 4: ЭКСПЛУАТАЦИЯ                                              │
│   ┌─────────┐   ┌─────────┐   ┌─────────┐                              │
│   │ VACUUM  │ → │Партици- │ → │Репликация│                              │
│   │ WAL     │   │онирование│   │         │                              │
│   └─────────┘   └─────────┘   └─────────┘                              │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
Детальный роадмап
Уровень 1: Основы SQL (Junior)
# Тема Статус Материал
1.1 Что такое SQL и реляционные БД Теория 1
1.2 SELECT, FROM — базовая выборка Теория 1
1.3 WHERE — фильтрация данных Теория 1
1.4 ORDER BY, LIMIT, OFFSET — сортировка и пагинация Теория 1
1.5 NULL — понимание трёхзначной логики Теория 1
1.6 Типы данных PostgreSQL Теория 1
1.7 INSERT, UPDATE, DELETE — изменение данных Теория 1
1.8 CREATE TABLE — создание таблиц Теория 1
1.9 PRIMARY KEY, FOREIGN KEY, UNIQUE Теория 1
1.10 JOIN — соединение таблиц Теория 2
1.11 INNER, LEFT, RIGHT, FULL JOIN Теория 2
1.12 GROUP BY, HAVING — группировка Теория 2
1.13 COUNT, SUM, AVG, MIN, MAX — агрегации Теория 2
Практика: Решить 10+ задач на Практической БД
Проверка: Квизы часть 1−2
Уровень 2: Продвинутый SQL (Middle-)
# Тема Статус Материал
2.1 Подзапросы в WHERE, SELECT, FROM Теория 2
2.2 Коррелированные подзапросы Теория 2
2.3 EXISTS, NOT EXISTS Теория 2
2.4 CTE (WITH) — общие табличные выражения Теория 2
2.5 Рекурсивные CTE Теория 2
2.6 UNION, INTERSECT, EXCEPT Теория 2
2.7 CASE WHEN — условная логика Теория 2
2.8 Оконные функции — ROW_NUMBER, RANK Теория 3
2.9 Оконные функции — LAG, LEAD, FIRST_VALUE Теория 3
2.10 Оконные функции — SUM/AVG OVER Теория 3
2.11 PARTITION BY, ORDER BY в окнах Теория 3
2.12 Frame specification (ROWS BETWEEN) Теория 3
Практика: Топ-N по группам, running total, gap analysis
Проверка: Квизы часть 3
Уровень 3: Оптимизация и индексы (Middle)
# Тема Статус Материал
3.1 Что такое индекс и зачем он нужен Теория 3
3.2 B-Tree индексы — как работают Теория 3
3.3 Составные индексы и порядок колонок Теория 3
3.4 Покрывающие индексы (INCLUDE) Теория 3
3.5 Частичные индексы (WHERE) Теория 3
3.6 GIN, GiST, BRIN — специальные индексы Теория 3
3.7 EXPLAIN — чтение плана запроса Теория 3
3.8 EXPLAIN ANALYZE — реальное выполнение Теория 3
3.9 Seq Scan vs Index Scan vs Index Only Scan Теория 3
3.10 Nested Loop, Hash Join, Merge Join Теория 3
3.11 Статистика и ANALYZE Теория 3
3.12 Когда индекс не используется Теория 3, Troubleshooting
Практика: Оптимизировать 5 медленных запросов
Проверка: Квизы часть 5
Уровень 4: Транзакции и MVCC (Middle+)
# Тема Статус Материал
4.1 Что такое транзакция, BEGIN/COMMIT/ROLLBACK Теория 4
4.2 ACID — четыре свойства Теория 4
4.3 Уровни изоляции — Read Committed Теория 4
4.4 Уровни изоляции — Repeatable Read Теория 4
4.5 Уровни изоляции — Serializable Теория 4
4.6 Аномалии: dirty read, non-repeatable read, phantom Теория 4
4.7 MVCC — концепция версий строк Теория 4
4.8 xmin, xmax, snapshot — как работает видимость Теория 4
4.9 Блокировки — FOR UPDATE, FOR SHARE Теория 4
4.10 Deadlock — причины и решения Теория 4, Troubleshooting
4.11 SAVEPOINT — точки сохранения Теория 4
Практика: Симуляция race condition, воспроизведение deadlock
Проверка: Квизы часть 4
Уровень 5: Архитектура PostgreSQL (Senior-)
# Тема Статус Материал
5.1 Архитектура: процессы и память Теория 4
5.2 shared_buffers — кэш страниц Настройка PostgreSQL
5.3 WAL — журнал упреждающей записи Теория 4
5.4 Checkpoint — синхронизация на диск Теория 4
5.5 VACUUM — очистка мёртвых строк Теория 4
5.6 Autovacuum — настройка Настройка PostgreSQL
5.7 Bloat — раздувание таблиц/индексов Теория 4, Troubleshooting
5.8 Transaction ID wraparound Теория 4
5.9 TOAST — хранение больших значений Теория 4
5.10 pg_stat_statements — анализ запросов Настройка PostgreSQL
Практика: Настроить PostgreSQL под нагрузку
Проверка: Troubleshooting чек-листы
Уровень 6: Масштабирование (Senior)
# Тема Статус Материал
6.1 Партиционирование — концепция Теория 4
6.2 Range, List, Hash партиционирование Теория 4
6.3 Partition pruning Теория 4
6.4 Streaming Replication — master/replica Теория 4
6.5 Logical Replication Теория 4
6.6 Connection pooling (PgBouncer) Настройка PostgreSQL
6.7 Read replicas для масштабирования Теория 4
6.8 Failover и High Availability Теория 4
Практика: Спроектировать схему с партиционированием
Чек-листы готовности
Навыки для Статус
Junior SQL Developer
Пишу SELECT/JOIN/GROUP BY без подсказок
Понимаю разницу LEFT/INNER JOIN
Знаю как работает NULL
Умею создавать таблицы с ключами
Понимаю нормализацию (1NF, 2NF, 3NF)
Middle SQL Developer
Использую CTE и оконные функции
Понимаю EXPLAIN и могу оптимизировать запрос
Знаю когда нужен индекс
Понимаю уровни изоляции транзакций
Могу спроектировать схему БД
Senior SQL / DBA
Понимаю MVCC на уровне xmin/xmax
Настраиваю PostgreSQL под нагрузку
Диагностирую bloat и проблемы производительности
Понимаю WAL, checkpoint, VACUUM
Умею настраивать репликацию
Проектирую партиционирование
Материалы курса
Теория

Файл

Содержание

Теория 1

Основы SQL, типы данных, DDL/DML

Теория 2

JOIN, агрегации, подзапросы, CTE

Теория 3

Оконные функции, индексы, EXPLAIN

Теория 4

Транзакции, MVCC, архитектура, паттерны

Практика

Файл

Содержание

Практическая БД (shop).sql

Готовая схема магазина с данными

Примеры реальных схем БД

Социалка, мессенджер, бронирование, платежи

Справочники

Файл

Содержание

Глоссарий терминов

A-Z термины SQL/PostgreSQL

Troubleshooting Guide

Решение типичных проблем

Настройка PostgreSQL

Конфигурация для разных сценариев

Квизы для самопроверки

15+ вопросов с ответами

Рекомендуемый порядок изучения
Переходите к модулю 1, чтобы начать изучение конкурентного программирования на Go.
Неделя 1-2: Основы (Теория 1)
    │
    ├── День 1-2: SELECT, WHERE, ORDER BY
    ├── День 3-4: NULL, типы данных
    ├── День 5-6: INSERT, UPDATE, DELETE
    └── День 7: CREATE TABLE, ключи
    │
Неделя 3-4: JOIN и агрегации (Теория 2)
    │
    ├── День 1-2: INNER/LEFT JOIN
    ├── День 3-4: GROUP BY, HAVING
    ├── День 5-6: Подзапросы, CTE
    └── День 7: Практика на shop DB
    │
Неделя 5-6: Оконные функции и индексы (Теория 3)
    │
    ├── День 1-3: ROW_NUMBER, RANK, LAG/LEAD
    ├── День 4-5: B-Tree, составные индексы
    └── День 6-7: EXPLAIN ANALYZE
    │
Неделя 7-8: Транзакции и архитектура (Теория 4)
    │
    ├── День 1-2: ACID, уровни изоляции
    ├── День 3-4: MVCC глубоко
    ├── День 5-6: WAL, VACUUM, bloat
    └── День 7: Настройка PostgreSQL
    │
Неделя 9+: Практика и углубление
    │
    ├── Решение задач из квизов
    ├── Проектирование своих схем
    ├── Оптимизация реальных запросов
    └── Изучение партиционирования/репликации
Следующие шаги после курса
1. Практика на реальных задачах

  • LeetCode Database Problems
  • HackerRank SQL Track
  • StrataScratch
2. Углублённые темы

  • PostGIS (геоданные)
  • TimescaleDB (временные ряды)
  • PostgreSQL Extensions
3. Смежные технологии

  • Redis (кэширование)
  • Elasticsearch (полнотекстовый поиск)
  • ClickHouse (аналитика)
4. DevOps для БД

  • Backup & Recovery
  • Мониторинг (Prometheus + Grafana)
  • CI/CD для миграций
Начинаем!