linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it worksскоро
  • Уроки
  • База знаний
  • Собеседование
home/postgres/lessons/pg-lab-24-1-query-lifecycle

lesson ── postgres-labs ── ~20 мин ── 4 шагов

Проследи запрос по стадиям и раскрой представление

Один и тот же запрос пройдём по стадиям: посмотрим, как ошибка имени ловится на анализе, а не на разборе, и как представление растворяется при переписывании. Запусти psql во вкладке client.

▶ интерактивный sandbox

Поднимется контейнер postgreslab/postgres-base с PostgreSQL 17 и psql. В браузере откроется терминал, база lab уже настроена. Каждый шаг проверяется автоматически. Сеть air-gapped, наружу контейнер не ходит.

запустить sandbox →

stack ── PostgreSQL 17 · psql · 1 GB RAM · air-gapped · самоуничтожается через 45 мин простоя

Шаги

  1. 01

    Где ловится ошибка имени

    Разбор проверяет только грамматику; имена связываются на анализе. Запусти заведомо синтаксически верный, но семантически неверный запрос:

    sql
    SELECT nope FROM flights;

    Ошибка column "nope" does not exist приходит на стадии анализа - грамматика-то корректна. Это первая стадия, где сервер заглянул в каталог. Теперь проверим, что таблица flights существует и доступна.

    подсказка

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

    ✓ flights на месте; ошибка имени рождается на анализе, не разборе.

  2. 02

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

    View - это сохранённый запрос, не данные:

    sql
    CREATE VIEW svo AS SELECT * FROM flights WHERE departure = 'SVO';
    подсказка

    CREATE VIEW не копирует строки - хранит только определение запроса.

    ✓ Представление создано.

  3. 03

    Посмотри, как view растворяется

    Сравни план запроса через view и прямого запроса:

    sql
    EXPLAIN SELECT flight_no FROM svo WHERE arrival = 'LED';
    EXPLAIN SELECT flight_no FROM flights WHERE departure = 'SVO' AND arrival = 'LED';

    Оба условия (departure и arrival) применены к одному скану flights - подзапрос view сплющен. Планы совпадают.

    подсказка

    Переписывание подставило определение view, планировщик сплющил подзапрос.

    ✓ View растворился в скан flights - сам по себе он не замедляет.

  4. 04

    Прочитай дерево плана соединения

    sql
    EXPLAIN SELECT t.passenger
    FROM tickets t JOIN flights f ON f.flight_id = t.flight_id
    WHERE f.departure = 'SVO';

    Читай снизу вверх: листья - сканы таблиц, наверху - узел соединения, отдающий результат. cost/rows/width - оценки планировщика.

    подсказка

    Дерево плана читается снизу вверх и изнутри наружу.

    ✓ Видно дерево плана с узлом соединения наверху.

Что ты узнал

Запрос проходит пять стадий: разбор (грамматика), анализ (имена и типы), переписывание (раскрытие view и RLS), планирование (выбор плана), выполнение. Стадии 1-3 про «что», стадия 4 про «как». View - сохранённый запрос; он сплющивается при планировании и не замедляет.

команды

  • EXPLAIN SELECT ...;показать дерево плана без выполнения
  • CREATE VIEW v AS SELECT ...;сохранить запрос как представление

концепции

  • · разбор проверяет грамматику, анализ связывает имена с каталогом
  • · переписывание раскрывает view и применяет RLS
  • · view растворяется при планировании - не замедляет запрос
  • · план строится заново и зависит от данных, а не только от текста

← предыдущая

Прочитай wait events и предикатные блокировки

следующая →

Воспроизведи стоимость Seq Scan вручную

Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки