Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Представления в PostgreSQL
Обычные представления
Представление (view) это ещё один объект базы данных PostgreSQL, наряду с таблицами. Представление состоит из запроса к одной или нескольким таблицам. Созданное, таким образом, представление далее будет хранится к базе данных. И к нему можно обращаться как к обычной таблице с помощью команды select.
Пример создания представления
create view myv1 as
select id, fio, id_f from student order by fio;
в результате создаётся объект, который можно увидеть в консоли в разделе Представления (views).
Обратиться к нему можно обычным способом, как будто это таблица:
select * from myv1;
И получим список студентов на основе таблицы student.
Но интересно то, что к представлению можно применять команды редактирования
insert into myv1 (fio, id_f) values ('Кроликов', 1)
в результате в таблицу student будет добавлена строка.
Точно также можно выполнять другие команды редактирования, например
delete from myv1 where id=20;
Соответственно будет удалена строка, удовлетворяющая указанному условию.
Но представление может иметь и более сложную структуру
create view my1 as
select s.id, s.fio, s.id_f, o.ocenka
from student s left join ocenki o on s.id=o.id_s;
Представление, таким образом, связано сразу с двумя таблицами. И соответственно
select * from my1
даст список студентов со всеми их оценками.
Если представление обращается сразу к нескольким таблицам, то команды, изменяющие данные, уже не применимы. Как решить эту проблему рассмотрим в одном следующих уроков и статей.
Замечание
Можно ли в представлении обращаться не только к таблицам, но и к другим представлениям? Да, конечно. Нет никаких ограничений.
Материализованные представления
В PostgreSQL реализованы так называемые материализованные представления. Их отличие от обычных представлений заключается в следующем:
Обычные представления "срабатывают" каждый раз, когда к ним происходит обращение. Материализованные представления могут хранить результаты запросов, поэтому при очередном обращении к ним, запрос может выполняться очень быстро.
Создать материализованное представление можно так
create materialized view my1 as
select s.id, s.fio, s.id_f, o.ocenka
from student s left join ocenki o on s.id=o.id_s;
Для обновление хранящихся результатов материализованного представления используется команда
refresh materialized view my1
Пока всё
См. также
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.