Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. PostgreSQL 18 с нуля до эксплуатации
Базы данных·28 тем·168 вопросов·уровень Junior, Middle, Senior

PostgreSQL 18 с нуля до эксплуатации

Последовательный курс без требований к начальным знаниям: от устройства базы и первых SQL-запросов до транзакций, индексов, безопасности, резервных копий и репликации. Каждый новый термин объясняется до использования и закрепляется в отдельной лабораторной работе.

Начать курсРепозиторий лабораторийv1.1.0

PostgreSQL 18 с нуля до эксплуатации

Этот курс начинается с вопроса «что такое база данных?» и постепенно доходит до индексов, резервных копий и репликации. Предварительные знания PostgreSQL и SQL не нужны.

Достаточно уметь открыть терминал и запускать готовые команды. Git, Docker, psql и устройство учебного стенда объясняются в первом уроке. Все примеры используют одну предметную область интернет-магазина, поэтому не приходится заново разбираться в данных в каждом модуле.

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

Каждый урок следует одному порядку:

  1. Новый термин объясняется обычными словами.
  2. Небольшой пример показывает, какую задачу он решает.
  3. SQL разбирается по частям.
  4. Отдельно указаны типичная ошибка и границы применения.
  5. Лабораторная работа проверяет результат на настоящем PostgreSQL 18.4.

Специальные термины сохраняются там, где без них нельзя читать документацию и планы PostgreSQL. При первом появлении рядом даётся русское объяснение.

Вопросы делятся на уровни junior, middle и senior. Это сложность проверки, а не требование знать тему заранее: нужная модель вводится в предыдущих уроках.

Что вы освоите

После курса вы сможете:

  • объяснить разницу между сервером, кластером, базой, схемой и таблицей;
  • создавать таблицы, типы, ключи и ограничения;
  • читать и изменять данные через SQL;
  • соединять таблицы и строить отчёты без лишних или потерянных строк;
  • понимать транзакции, уровни изоляции и блокировки;
  • читать EXPLAIN и подбирать индекс под конкретный запрос;
  • безопасно менять структуру заполненной базы;
  • настраивать роли и защиту строк;
  • наблюдать за autovacuum, соединениями, WAL и местом на диске;
  • создавать и проверять резервные копии;
  • объяснить репликацию, переключение при отказе и работу пула соединений.

Учебное окружение

Основная версия — PostgreSQL 18.4. Лаборатории опубликованы в отдельном репозитории, выпуск v1.1.0.

Первый запуск выполняется так:

git clone --branch v1.1.0 \
  https://gitlab.potapov.me/courses/postgresql-labs.git
cd postgresql-labs
make up
make smoke

Команды и требования подробно разобраны в первом уроке. Стенд запускается в Docker и хранит данные в отдельном именованном томе. Разрушающие упражнения не должны выполняться в системной или рабочей базе.

На сайте находятся уроки, вопросы и итоговый экзамен. SQL-лаборатории запускаются локально: одноразовой базы прямо в браузере пока нет.

Программа

1. База и модель данных

  1. PostgreSQL с нуля: база и первое подключение.
  2. Как превратить требования в таблицы.
  3. Нормализация: как убрать опасные повторы.
  4. Типы данных: числа, текст, время, UUID и диапазоны.

2. Чтение и изменение данных

  1. SELECT, NULL, сортировка и выдача страницами.
  2. Безопасное изменение структуры базы.
  3. Ограничения: правила, которые защищает PostgreSQL.
  4. INSERT, UPDATE, DELETE, MERGE и безопасные повторы.

3. Запросы и отчёты

  1. Соединение таблиц через JOIN.
  2. Суммы, количества и итоги по группам.
  3. Подзапросы, CTE, рекурсия и объединение результатов.
  4. Оконные функции и вычисления без потери строк.
  5. JSONB и массивы.
  6. Поиск по началу, фрагменту и словам.

4. Код внутри сервера

  1. Обычные и материализованные представления.
  2. SQL-функции, PL/pgSQL и процедуры.
  3. Триггеры и переходные таблицы.

5. Одновременная работа и хранение

  1. Транзакции, снимки и блокировки.
  2. Страницы, версии строк, TOAST, VACUUM и WAL.

6. Производительность

  1. Как планировщик использует статистику.
  2. Как читать EXPLAIN и проводить воспроизводимый опыт.
  3. Основы индексов и цена ускорения чтения.
  4. Составные, частичные и вычисляемые B-tree-индексы.
  5. GIN, GiST, SP-GiST, BRIN и Hash.

7. Эксплуатация

  1. Наблюдение, autovacuum и планирование ёмкости.
  2. Роли, минимальные права и RLS.
  3. Резервные копии, PITR, секции и обновление версии.
  4. Репликация, пулы соединений и итоговый проект.

Итоговый проект

Итоговый проект собирает темы курса в одну систему. Нужно спроектировать таблицы, провести миграцию, защитить одновременные изменения, разобрать планы, добавить индексы, настроить RLS, создать копию и описать восстановление после отказа.

Каждое решение сопровождается измерением или проверкой. Цель проекта — не повторить команды, а показать, почему выбран именно этот вариант.

Версия курса: 5.3

Среда выполнения: PostgreSQL 18.4

Последнее обновление: 2026-07-20

  1. 1

    PostgreSQL с нуля: база и первое подключение

    База данных, таблица, сервер, клиент, psql, MVCC и WAL простыми словами

    6 вопросов10.0(1)
  2. 2

    Как превратить требования в таблицы

    Смысл строки, ключи, ограничения, связи и данные разных организаций

    6 вопросов
  3. 3

    Нормализация: как убрать опасные повторы

    Зависимости между данными, ошибки повторения и осознанное хранение итогов

    6 вопросов
  4. 4

    Типы данных: какие значения можно хранить

    Целые и точные числа, текст, время, UUID, адреса, диапазоны и массивы

    6 вопросов
  5. 5

    SELECT с нуля: чтение, фильтрация и порядок

    Структура запроса, NULL, поиск, сортировка и выдача данных страницами

    6 вопросов
  6. 6

    Как безопасно менять структуру базы

    Миграции, блокировки, поэтапное заполнение и совместимость версий приложения

    6 вопросов
  7. 7

    Ограничения: правила, которые защищает база

    NOT NULL, CHECK, UNIQUE, внешние ключи и проверка старых строк

    6 вопросов
  8. 8

    Как добавлять, изменять и удалять строки

    INSERT, UPDATE, DELETE, MERGE, импорт файлов и безопасный повтор команд

    6 вопросов
  9. 9

    JOIN: как соединять строки разных таблиц

    Внутреннее и левое соединение, размножение строк, EXISTS и LATERAL

    6 вопросов
  10. 10

    Агрегация: суммы, количества и итоги

    COUNT, SUM, GROUP BY, HAVING, условные показатели и подытоги

    6 вопросов
  11. 11

    Подзапросы и промежуточные результаты

    EXISTS, CTE, материализация, рекурсия и объединение запросов

    6 вопросов
  12. 12

    Оконные функции без потери строк

    Нумерация, рейтинги, накопительные итоги, рамки, LAG и LEAD

    6 вопросов
  13. 13

    JSONB и массивы: гибкая структура

    Граница обычных столбцов, поиск внутри JSONB и GIN-индексы

    6 вопросов
  14. 14

    Поиск по началу, фрагменту и словам

    LIKE, триграммы, полнотекстовый документ, ранжирование и качество выдачи

    6 вопросов
  15. 15

    Представления: запрос или сохранённый результат

    Обычные и материализованные представления, права и обновление данных

    6 вопросов
  16. 16

    Функции и процедуры внутри PostgreSQL

    SQL, PL/pgSQL, изменчивость, динамические команды и права владельца

    6 вопросов
  17. 17

    Триггеры: автоматическая реакция на изменения

    Триггерные функции, запуск до и после команды, аудит и скрытая цена

    6 вопросов
  18. 18

    Транзакции и блокировки

    Снимки данных, уровни изоляции, блокирование, взаимоблокировки и повторы

    6 вопросов
  19. 19

    Как PostgreSQL хранит строки и WAL

    Страницы, версии строк, HOT, TOAST, VACUUM и контрольные точки

    6 вопросов
  20. 20

    Как PostgreSQL выбирает план запроса

    Оценка числа строк, статистика, условная стоимость и параметры запроса

    6 вопросов
  21. 21

    EXPLAIN: как разбирать медленный запрос

    Дерево плана, строки, повторы, буферы, временные файлы и честное сравнение

    6 вопросов
  22. 22

    Индексы: ускорение чтения и его цена

    Способы чтения, карта видимости, цена записи и безопасное построение

    6 вопросов
  23. 23

    Как составлять B-tree-индекс под запрос

    Порядок ключей, частичные индексы, выражения и дополнительные столбцы

    6 вопросов
  24. 24

    Другие индексы: GIN, GiST, SP-GiST, BRIN и Hash

    Методы доступа для JSONB, массивов, диапазонов и очень больших таблиц

    6 вопросов
  25. 25

    Наблюдение и обслуживание PostgreSQL

    Сеансы, счётчики, ожидания, autovacuum, место на диске и оповещения

    6 вопросов
  26. 26

    Роли и доступ к строкам

    Минимальные права, search_path, RLS, пароли и защищённые соединения

    6 вопросов
  27. 27

    Резервные копии, восстановление и обновление

    Допустимая потеря данных, pg_dump, PITR, секции и переход между версиями

    6 вопросов
  28. 28

    Репликация, пулы соединений и итоговый проект

    Физическая и логическая репликация, переключение, PgBouncer и исходящая очередь

    6 вопросов
  29. Зачёт

    Доступен после всех тем (0 из 28)

  30. Экзамен

    Доступен после зачёта

66 / 66

Система управления базами данных, СУБД

Модель данных

Программа, которая хранит данные, выполняет запросы и управляет одновременным доступом, правами и восстановлением.

Пример

PostgreSQL — СУБД; база `course` — один из наборов данных, которыми она управляет.

Связанные термины

PostgreSQL

Модель данных

Объектно-реляционная СУБД с открытым исходным кодом. Сервер PostgreSQL хранит данные и выполняет SQL-команды клиентов.

Пример

Программа `postgres` запускает сервер, а `psql` подключается к нему как клиент.

Связанные термины

Кластер баз данных PostgreSQL

Модель данных

Все базы, которыми управляет один экземпляр сервера PostgreSQL и которые находятся в одном каталоге данных. Это не обязательно несколько компьютеров.

Пример

Один кластер может содержать базы `course`, `postgres` и `analytics`.

Связанные термины

База данных

Модель данных

Отдельное пространство данных внутри кластера PostgreSQL. Клиент выбирает одну базу при подключении.

Пример

Параметр `-d course` команды `psql` выбирает базу `course`.

Связанные термины

Схема

Модель данных

Именованное пространство внутри базы данных, которое группирует таблицы, функции и другие объекты.

Пример

В имени `marketplace.orders` первая часть — схема, вторая — таблица.

Связанные термины

Таблица

Модель данных

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

Пример

Одна строка `orders` хранит один заказ, а столбец `created_at` — время его создания.

Связанные термины

Строка и столбец

Модель данных

Строка хранит один экземпляр факта, а столбец — одно его свойство одинакового типа для всех строк таблицы.

Пример

В строке заказа `id` и `total_amount` — столбцы с номером и суммой.

Связанные термины

Клиент и сервер

Эксплуатация и безопасность

Сервер PostgreSQL хранит данные и выполняет команды. Клиент, например `psql` или приложение, подключается и отправляет ему SQL.

Пример

Python-приложение и `psql` — разные клиенты одного сервера PostgreSQL.

Связанные термины

Подключение и сеанс

Эксплуатация и безопасность

Подключение — канал связи клиента с сервером. Сеанс — период от установки этого подключения до его закрытия вместе с текущими настройками.

Пример

Команда `SET TIME ZONE` без другой области действия меняет настройку текущего сеанса.

Связанные термины

Роль

Эксплуатация и безопасность

Учётная запись PostgreSQL и набор прав. Роль с `LOGIN` может подключаться, а роль без `LOGIN` удобно использовать как группу разрешений.

Пример

Роль `app_read` получает право чтения, а `app_runtime` наследует её права.

Связанные термины

psql

Эксплуатация и безопасность

Текстовый клиент PostgreSQL для подключения, выполнения SQL и служебных команд, начинающихся с обратной косой черты.

Пример

Команда `\conninfo` показывает текущее подключение, а `\q` завершает psql.

Связанные термины

Миграция базы данных

Эксплуатация и безопасность

Версионируемый набор команд, который изменяет структуру базы: создаёт таблицу, добавляет столбец, ограничение или индекс.

Пример

Миграция сначала добавляет необязательный столбец, затем заполняет его и только после проверки включает `NOT NULL`.

Связанные термины

Зерно таблицы

Модель данных

Точное утверждение о том, какой факт представляет одна строка и при каких условиях две строки считаются разными.

Пример

Одна строка order_items — один товар внутри одного заказа; ключ (order_id, product_id).

Связанные термины

Функциональная зависимость

Модель данных

Зависимость X → Y, при которой одинаковое значение X определяет одно значение Y в допустимом состоянии данных.

Пример

plan_code → plan_name; атрибут тарифа хранится в справочнике тарифов.

Связанные термины

Нормальная форма

Модель данных

Набор требований к зависимостям отношения, уменьшающий аномалии вставки, обновления и удаления.

Пример

Транзитивно зависящие атрибуты тарифа вынесены из назначения тарифа организации.

Связанные термины

Денормализация

Модель данных

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

Пример

Счётчик заказов хранится рядом с организацией и регулярно сверяется с исходными orders.

Связанные термины

PRIMARY KEY

Типы и ограничения

Первичный ключ: уникальный идентификатор строки, который не допускает NULL. У таблицы один такой ключ, но он может состоять из нескольких столбцов.

Пример

PRIMARY KEY (order_id, product_id)

Связанные термины

FOREIGN KEY

Типы и ограничения

Внешний ключ: правило, которое требует, чтобы ссылка в одной таблице вела на существующее уникальное значение другой таблицы.

Пример

FOREIGN KEY (order_id, org_id) REFERENCES orders(id, org_id)

Связанные термины

UNIQUE NULLS NOT DISTINCT

Типы и ограничения

Уникальное ограничение, считающее NULL равными друг другу для проверки уникальности.

Пример

UNIQUE NULLS NOT DISTINCT (org_id, external_alias)

Связанные термины

Отложенное ограничение

Типы и ограничения

Ограничение с `DEFERRABLE`, проверку которого транзакция может перенести с конца отдельной SQL-команды на момент `COMMIT`.

Пример

SET CONSTRAINTS positions_key DEFERRED;

Связанные термины

NULL и UNKNOWN

SQL и аналитика

NULL обозначает отсутствующее или неизвестное значение; большинство сравнений с ним дают UNKNOWN, а WHERE сохраняет только TRUE.

Пример

email IS NULL; выражение email = NULL не является проверкой на NULL.

Связанные термины

timestamptz

Типы и ограничения

Тип для конкретного момента времени. При выводе он переводится в часовой пояс сеанса, но исходное название часового пояса в значении не хранится.

Пример

TIMESTAMPTZ '2026-07-19 09:00 Europe/Moscow'

Связанные термины

Тип диапазона

Типы и ограничения

Тип с нижней и верхней границами и явным правилом их включения. Поддерживает пересечение, вхождение и исключающие ограничения.

Пример

tstzrange(started_at, ended_at, '[)')

Связанные термины

Пагинация по ключу

SQL и аналитика

Продолжение выдачи после значений последней показанной строки вместо поиска и отбрасывания строк через `OFFSET`.

Пример

WHERE (created_at,id) < ($1,$2) ORDER BY created_at DESC,id DESC LIMIT 50

Связанные термины

UPSERT

SQL и аналитика

Вставка, которая через `ON CONFLICT` заранее задаёт действие при нарушении уникальности: ничего не делать или обновить существующую строку.

Пример

INSERT ... ON CONFLICT (org_id, external_id) DO UPDATE SET attempts = inbox.attempts + 1 RETURNING *;

Связанные термины

MERGE

SQL и аналитика

Команда, которая сопоставляет входные строки с целевой таблицей и по условиям `WHEN` вставляет или обновляет данные. Вход должен однозначно определять целевую строку.

Пример

MERGE INTO inventory USING incoming ON ... WHEN MATCHED THEN UPDATE ...;

Связанные термины

Идемпотентный эффект

Модель данных

Повтор операции с тем же ключом приводит к тому же наблюдаемому бизнес-результату без повторного применения эффекта.

Пример

UNIQUE external_id в inbox защищает повторную доставку webhook.

Связанные термины

LATERAL

SQL и аналитика

Разрешает элементу FROM ссылаться на столбцы предшествующих элементов FROM и вычисляться для каждой их строки.

Пример

LEFT JOIN LATERAL (SELECT ... ORDER BY created_at DESC,id DESC LIMIT 1) p ON true

Связанные термины

Размножение строк при JOIN

SQL и аналитика

Увеличение числа строк при соединении, когда одной строке одной таблицы соответствует несколько строк другой.

Пример

JOIN orders→items→payments может перемножить items и payments до агрегации.

Связанные термины

NOT EXISTS

SQL и аналитика

Проверка отсутствия подходящей строки. В отличие от `NOT IN`, безопасно работает, когда внутренний столбец содержит NULL.

Пример

WHERE NOT EXISTS (SELECT 1 FROM bans b WHERE b.user_id = u.id)

Связанные термины

GROUPING SETS

SQL и аналитика

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

Пример

GROUP BY GROUPING SETS ((org_id,status),(org_id),())

Связанные термины

Рамка окна

SQL и аналитика

Часть строк группы, которую оконная функция использует для текущей строки, например от начала группы до текущей строки.

Пример

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

Связанные термины

JSONB

Типы и ограничения

Разобранное двоичное представление JSON с операторами поиска и индексированием. Не заменяет обычные столбцы, типы и внешние ключи для устойчивых правил.

Пример

attributes @> '{"wireless": true}'::jsonb

Связанные термины

tsvector / tsquery

SQL и аналитика

`tsvector` хранит подготовленные лексемы документа, а `tsquery` — условие полнотекстового поиска, разобранное той же языковой конфигурацией.

Пример

search_vector @@ websearch_to_tsquery('simple', 'postgresql -beginner')

Связанные термины

Материализованное представление

Серверное программирование

Физически сохранённый результат запроса. Он не меняется вместе с исходными таблицами и остаётся устаревшим до явного `REFRESH`.

Пример

REFRESH MATERIALIZED VIEW CONCURRENTLY org_sales;

Связанные термины

Категория изменчивости функции

Серверное программирование

Обещание `IMMUTABLE`, `STABLE` или `VOLATILE` о том, от чего зависит результат функции и как часто он может меняться. Влияет на допустимые оптимизации.

Пример

Функция, читающая изменяемую таблицу, не может честно быть IMMUTABLE.

Связанные термины

SECURITY DEFINER

Серверное программирование

Функция, которая выполняется с правами владельца. Требует безопасного `search_path`, полных имён объектов и минимальных прав `EXECUTE`.

Пример

SECURITY DEFINER SET search_path = pg_catalog, trusted_app

Связанные термины

Переходная таблица

Серверное программирование

Набор старых или новых строк, изменённых одной командой. Доступен подходящему триггеру `AFTER` уровня команды для обработки всего набора сразу.

Пример

REFERENCING OLD TABLE AS old_rows NEW TABLE AS new_rows

Связанные термины

Транзакция

Конкурентность и хранение

Группа команд, которая фиксируется целиком через `COMMIT` или отменяется через `ROLLBACK`. Внешние действия, например сетевой вызов, требуют отдельного согласования.

Пример

BEGIN; UPDATE inventory ... RETURNING available; INSERT INTO outbox ...; COMMIT;

Связанные термины

Снимок MVCC

Конкурентность и хранение

Правила, по которым PostgreSQL выбирает видимые версии строк для SQL-команды или транзакции согласно уровню изоляции.

Пример

READ COMMITTED получает новый snapshot для каждого statement.

Связанные термины

Взаимоблокировка

Конкурентность и хранение

Цикл ожидания, в котором транзакции держат нужные друг другу блокировки. PostgreSQL обнаруживает цикл и отменяет одну транзакцию с кодом `40P01`.

Пример

Две транзакции блокируют строки A и B в противоположном порядке.

Связанные термины

Сериализуемая изоляция снимков

Конкурентность и хранение

Реализация уровня `SERIALIZABLE`, которая отслеживает опасные зависимости чтения и записи и отменяет транзакцию, способную создать невозможный последовательный результат.

Пример

Приложение повторяет всю транзакцию после SQLSTATE 40001.

Связанные термины

Обновление HOT

Конкурентность и хранение

Обновление без новых индексных записей. Возможно, если индексируемые значения не меняются и новая версия строки помещается на той же странице таблицы.

Пример

Низкий fillfactor оставляет место для обновления неиндексируемого status.

Связанные термины

WAL

Конкурентность и хранение

Журнал предварительной записи: описание изменения надёжно сохраняется до соответствующей страницы таблицы. Используется для восстановления после сбоя и физической репликации.

Пример

pg_current_wal_lsn() показывает текущую позицию WAL записи кластера.

Связанные термины

VACUUM

Эксплуатация и безопасность

Обслуживание MVCC: делает место старых версий строк повторно используемым, поддерживает карту видимости и предотвращает переполнение идентификаторов транзакций.

Пример

VACUUM (VERBOSE, ANALYZE) marketplace.orders;

Связанные термины

Autovacuum

Эксплуатация и безопасность

Фоновые процессы, которые автоматически запускают `VACUUM` и `ANALYZE` по числу изменений, возрасту транзакций и другим условиям. Параметры можно задавать для отдельной таблицы.

Пример

ALTER TABLE events SET (autovacuum_vacuum_scale_factor = 0.02);

Связанные термины

Оценка числа строк

Планы и индексы

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

Пример

Сравнивайте estimated rows с actual rows × loops в нижнем проблемном узле.

Связанные термины

Расширенная статистика

Планы и индексы

Статистика по сочетанию столбцов или выражений, которая описывает зависимости, число разных комбинаций и частые значения для более точной оценки связанных условий.

Пример

CREATE STATISTICS country_postal (dependencies, mcv) ON country, postal_code FROM deliveries;

Связанные термины

Стоимость плана

Планы и индексы

Относительная безразмерная оценка работы для сравнения вариантов плана. Не является прогнозом времени в миллисекундах.

Пример

total cost помогает выбрать plan только внутри текущей cost model и статистики.

Связанные термины

EXPLAIN ANALYZE

Планы и индексы

Действительно выполняет SQL-команду и добавляет к плану фактическое число строк, повторов и время. Параметры `BUFFERS`, `WAL` и `SETTINGS` показывают дополнительные измерения.

Пример

EXPLAIN (ANALYZE, BUFFERS, WAL, SETTINGS, FORMAT JSON) SELECT ...;

Связанные термины

B-tree

Планы и индексы

Упорядоченный метод индекса для равенства, диапазонов и сортировки. Возможности определяют класс операторов и порядок ключей.

Пример

CREATE INDEX ON events (org_id, occurred_at DESC, id DESC);

Связанные термины

Класс операторов

Планы и индексы

Связывает тип данных и набор операций с методом доступа и определяет, какие условия способен обслуживать индекс.

Пример

attributes jsonb_path_ops в GIN оптимизирует containment/jsonpath, но не весь jsonb_ops API.

Связанные термины

GIN

Планы и индексы

Инвертированный метод индекса для значений, содержащих много элементов, например `tsvector`, массивов и JSONB.

Пример

CREATE INDEX ON products USING gin (attributes jsonb_path_ops);

Связанные термины

GiST

Планы и индексы

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

Пример

CREATE INDEX ON bookings USING gist (reserved_during);

Связанные термины

BRIN

Планы и индексы

Компактный индекс с краткими сведениями о группах страниц таблицы. Эффективен, когда значения связаны с физическим порядком строк, и допускает приблизительные совпадения с повторной проверкой.

Пример

CREATE INDEX ON events USING brin (occurred_at) WITH (pages_per_range=32);

Связанные термины

Карта видимости

Планы и индексы

Служебный файл, отмечающий полностью видимые и замороженные страницы таблицы. Позволяет `Index Only Scan` не обращаться к таблице для полностью видимой страницы.

Пример

Heap Fetches в плане растут, если нужные pages ещё не all-visible.

Связанные термины

Защита на уровне строк, RLS

Эксплуатация и безопасность

Политики, которые ограничивают доступные строки по команде и роли. Суперпользователь и `BYPASSRLS` обходят RLS, а владелец обычно обходит её без `FORCE`.

Пример

CREATE POLICY tenant_isolation ON notes USING (org_id = trusted_org());

Связанные термины

search_path

Эксплуатация и безопасность

Порядок схем для поиска объекта по неполному имени. Доступная для записи ранняя схема создаёт риск подмены объекта в коде с повышенными правами.

Пример

SECURITY DEFINER SET search_path = pg_catalog, trusted_app

Связанные термины

RPO

Восстановление и отказоустойчивость

Максимально допустимый объём потери данных, обычно выраженный во времени между последней восстанавливаемой точкой и сбоем.

Пример

RPO 5 минут требует проверенной доставки и хранения WAL с меньшим окном.

Связанные термины

RTO

Восстановление и отказоустойчивость

Максимально допустимое время восстановления работоспособного сервиса после сбоя. Подтверждается тренировкой, а не размером файла копии.

Пример

Restore drill измеряет время до запуска проверенной восстановленной БД.

Связанные термины

PITR

Восстановление и отказоустойчивость

Восстановление базовой физической копии с воспроизведением архивного WAL до выбранного времени, идентификатора транзакции, точки восстановления или позиции LSN.

Пример

Recovery останавливается у контрольного restore point до ошибочного DELETE.

Связанные термины

Физическая репликация

Восстановление и отказоустойчивость

Передача и воспроизведение WAL для близкой побайтовой копии всего кластера совместимой основной версии. Синхронный или асинхронный режим меняет сохранность и задержку.

Пример

Standby replay position сравнивают с primary WAL position и lag в bytes/time.

Связанные термины

Логическая репликация

Восстановление и отказоустойчивость

Декодирование и применение изменений строк выбранных опубликованных таблиц. Структура, роли, последовательности и конфликты управляются отдельно.

Пример

CREATE PUBLICATION app_pub FOR TABLE orders, payments;

Связанные термины

Два ведущих узла, split brain

Восстановление и отказоустойчивость

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

Пример

Перед promotion orchestrator изолирует старый primary от клиентов и storage/network.

Связанные термины

Пул транзакций

Эксплуатация и безопасность

Режим пула, в котором серверное соединение закрепляется за клиентом только до `COMMIT` или `ROLLBACK`. Состояние сеанса между транзакциями не гарантировано.

Пример

Session advisory locks и temporary tables несовместимы с ожиданием постоянного backend.

Связанные термины

Транзакционная исходящая очередь

Восстановление и отказоустойчивость

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

Пример

INSERT INTO payment_inbox; UPDATE orders; INSERT INTO outbox; COMMIT;

Связанные термины

Частые вопросы о курсе «PostgreSQL 18 с нуля до эксплуатации»

Состав курса, уровни, практика и способы проверки знаний.

Что входит в курс «PostgreSQL 18 с нуля до эксплуатации»?

Курс включает 28 тем и 168 вопросов с разбором ответа, а также 28 тематических лабораторных работ. Начать можно с первой темы курса.

Для какого уровня рассчитан курс «PostgreSQL 18 с нуля до эксплуатации»?

Маршрут охватывает уровни Junior, Middle, Senior. Темы расположены от основы к более сложным инженерным задачам, поэтому можно начать с подходящего места и не пропускать важные зависимости.

Есть ли в курсе практические и лабораторные задания?

К темам привязано 28 лабораторных заданий. Условия и ссылка на репозиторий находятся на странице курса и внутри соответствующих учебных материалов.

Как проверить, что материал усвоен?

После прохождения тем доступен зачёт по курсу «PostgreSQL 18 с нуля до эксплуатации» — 20 случайных вопросов с порогом 80%. После зачёта открывается экзамен с развёрнутыми ответами и автоматической оценкой, приближённый к техническому собеседованию.

Курс «PostgreSQL 18 с нуля до эксплуатации» бесплатный?

Да, курс полностью бесплатный: все 28 тем доступны без оплаты.

PostgreSQL на собеседовании

Backend-собеседования почти всегда включают блок про PostgreSQL — обычно не в формате «назовите определение», а через практические вопросы: как ускорить конкретный запрос, что произойдёт при параллельных транзакциях, почему индекс не используется. Ключевые темы курса под эту часть интервью:

  • — Индексы и производительность: какие индексы существуют, когда планировщик их не использует
  • — Транзакции и блокировки: уровни изоляции, MVCC, deadlock
  • — JOIN и подзапросы
  • — Оконные функции для аналитических запросов
Пройти тест по PostgreSQL