Обычные представления: логическое повторное использование
Создавайте представления для инкапсуляции сложных запросов, упрощения отчётов и предоставления доступа на чтение к части столбцов
«Обычные представления: логическое повторное использование» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Что такое представление?
Представление — это сохранённый SELECT. При каждом запросе к представлению выполняется базовый SELECT. Это именованный запрос, к которому можно применять JOIN, фильтрацию и агрегацию.
CREATE VIEW active_users AS
SELECT id, email, full_name
FROM users
WHERE deleted_at IS NULL;Использование представления
Запрашивайте его так же, как любую таблицу:
SELECT COUNT(*) FROM active_users;
SELECT * FROM active_users WHERE email LIKE '%@gmail.com';Представления не хранят данные
Сохраняется определение представления, а не результат. Каждый запрос разворачивает представление и выполняет базовый SELECT. Поэтому действуют те же соображения относительно плана запроса.
Зачем нужны представления?
- Повторное использование — определите сложный запрос один раз
- Абстракция — скройте реализацию (объедините 3 таблицы → «active_users»)
- Безопасность — выдайте разрешение SELECT на представление, не открывая доступ к базовым таблицам
- Совместимость — сохраняйте прежнюю форму запросов после изменений схемы
CREATE OR REPLACE
Изменяйте представление на месте — но только если типы и порядок столбцов совпадают:
CREATE OR REPLACE VIEW active_users AS
SELECT id, email, full_name, last_login
FROM users
WHERE deleted_at IS NULL;
-- ERROR if columns conflict; DROP VIEW + CREATE VIEW instead.Представления с JOIN и агрегатами
Распространённый случай: сводные данные по каждому пользователю:
CREATE VIEW user_stats AS
SELECT u.id, u.email,
COUNT(o.id) AS order_count,
COALESCE(SUM(o.total), 0) AS revenue
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email;Изменяемые представления
Простые представления (одна таблица, без агрегатов и DISTINCT) являются изменяемыми — через них можно выполнять INSERT/UPDATE/DELETE. PostgreSQL автоматически обновляет их, где это возможно.
Представления с указанием схемы
Размещайте служебные представления в отдельной схеме:
CREATE SCHEMA api;
CREATE VIEW api.users_public AS
SELECT id, email, full_name FROM users WHERE deleted_at IS NULL;
GRANT SELECT ON api.users_public TO app_reader;Представления и разрешения
По умолчанию представление выполняется с привилегиями пользователя, выполняющего запрос, — ему по-прежнему нужны разрешения на базовые таблицы. Чтобы пользователь с небольшими привилегиями мог запрашивать конфиденциальную таблицу, используйте функции SECURITY DEFINER.
Особенности производительности
Планировщик разворачивает представления и применяет обычные оптимизации. Иногда GROUP BY в представлении блокирует проталкивание условий фильтрации — разделите запрос или перепишите его, если EXPLAIN показывает проблему.
Зависимости представлений
Удаление базовой таблицы блокируется, если от неё зависит представление. Используйте DROP TABLE ... CASCADE только тогда, когда это действительно нужно. Выведите зависимые объекты:
SELECT * FROM pg_depend
WHERE refobjid = 'users'::REGCLASS;Итоги
Представления — это повторно используемые SELECT.
- Определите один раз, запрашивайте многократно
- Абстракция и безопасность
- Изменяемы, если достаточно просты
- Повторно выполняются при каждом запросе — встроенного кэширования нет
Быстрая проверка
Сохраняется ли результат при запросе к представлению?
Часто задаваемые вопросы
Урок «Обычные представления: логическое повторное использование» бесплатный?
Да — полный текст урока «Обычные представления: логическое повторное использование» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Обычные представления: логическое повторное использование»?
Создавайте представления для инкапсуляции сложных запросов, упрощения отчётов и предоставления доступа на чтение к части столбцов Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Обычные представления: логическое повторное использование»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Обычные представления: логическое повторное использование
- Обновляемые представления и триггеры INSTEAD OF
- Материализованные представления и стратегии REFRESH
- Когда нужна предварительная агрегация