Представления в Postgresql
VIEW Общие сведения
При работе с базами данных часто приходится выполнять одни и те же запросы, которые могут быть весьма сложными и обращаться к нескольким таблицам.
Чтобы не формировать такие запросы многократно, есть возможность использовать представления. При выборке данных представления почти не отличаются от обычных таблиц.
Такой подход помогает избавиться от лишних запросов в коде языка программирования, например PHP
Для создания представлений используется CREATE VIEW имя_представления AS запрос к базе для выборки ;
Создание представлений (views)
demo=# CREATE VIEW seats_by_fare_cond AS
SELECT aircraft_code,
fare_conditions_code,
count ( * ) FROM seats
GROUP BY aircraft_code, fare_conditions_code
ORDER BY aircraft_code, fare_conditions_code;
CREATE VIEW
demo=#
Далее к этому представлению можно обращаться как к обычной таблице:
demo=# select * from seats_by_fare_cond ;
aircraft_code | fare_conditions_code | count
---------------+----------------------+-------
319 | 1 | 96
319 | 2 | 20
320 | 1 | 120
320 | 2 | 20
321 | 1 | 142
321 | 2 | 28
733 | 1 | 118
733 | 2 | 12
763 | 1 | 192
763 | 2 | 30
773 | 1 | 324
773 | 2 | 30
773 | 3 | 48
CN1 | 1 | 12
CR2 | 1 | 50
SU9 | 1 | 85
SU9 | 2 | 12
(17 rows)
demo=#
Для CREATE VIEW postgresql имеет свое расширение OR REPLACE. Если представление существует можно не удалять его, а просто заменить. Однако при создании новой версии без удалении старой(DROP VIEW), должны оставаться неизменными имена столбцов, в противном случае необходимо удалить старое представление.
Допустим необходимо заменить имя столбца, по идее можно использовать псевдоним с помощью AS или указать список имен в начале команды CREATE VIEW name, name, name REPLACE VIEW seats_by_fare_cond ..... Однако в обоих случаях запрос к представлению вернет ошибку. Т.е. при использовании команды REPLACE VIEW нельзя изменить имя столбца, в таком случае придется удалить старое представление и создать представление заново.
demo=# DROP VIEW seats_by_fare_cond;
CREATE OR REPLACE VIEW seats_by_fare_cond
AS
SELECT aircraft_code,
fare_conditions_code,
count( * ) AS num_seats
FROM seats
GROUP BY aircraft_code, fare_conditions_code
ORDER BY aircraft_code, fare_conditions_code;
CREATE VIEW
demo=#
Во втором случае можно использовать перечисления имен:
......
CREATE OR REPLACE VIEW seats_by_fare_cond ( code, fare_cond, num_seats )
......
Посмотреть описание представления:
demo=# \d seats_by_fare_cond
View "bookings.seats_by_fare_cond"
Column | Type | Collation | Nullable | Default
----------------------+--------------+-----------+----------+---------
aircraft_code | character(3) | | |
fare_conditions_code | integer | | |
num_seats | bigint | | |
demo=#
Если столбцов в представлении много, тогда при запросе к представлению обзор содержимого будет неудобным. В таком случае можно переключиться на другой способ вывода выборки:
\x seats_by_fare_cond
Материализованные представления
Источники
Связанные темы
Оптимизация запросов в Postgresql
Установка и настройка MS SQL Server 2008 на Windows Server 2008 r
Системный каталог в Postgresql
Табличные пространства в Postgresql
Определение данных в Postgresql
Изменение временной зоны в Postgresql
Основные команды psql и sql Postgresql
Методы формирования соединений наборов строк
Агрегирование и группировка в Postgresql