Представления в 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
    Материализованные представления


    Источники
    Последнее изменение: 06.11.2024 14:11


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ