PostgreSQL — материализованные представления

Опубликовано: 5 Октября, 2022

В PostgreSQL материализованные представления — это представления, которые могут физически хранить данные. Обычно их выбирают, если требуется быстрый доступ к данным. Материализованное представление кэширует результат сложных запросов (которые требуют большого количества вычислений и операций) и дополнительно поддерживает обновление кэшированных данных. Материализованные представления определяются запросами к базе данных, аналогичными представлениям в PostgreSQL.

В этой статье мы подробно рассмотрим представления PostgreSQL Materializes.

Создание материализованных представлений:

Следующий оператор используется для создания материализованного представления в PostgreSQL:

CREATE MATERIALIZED VIEW 

Теперь приведенный выше оператор можно использовать в качестве запроса к базе данных, как показано ниже:

Syntax: CREATE MATERIALIZED VIEW your_view_name
AS
your_query
WITH [NO] DATA;

Давайте посмотрим, что мы сделали в приведенном выше запросе:

  • Во-первых, нам нужно указать имя представления после оператора CREATE MATERIALIZED VIEW.
  • Затем мы добавляем запрос данных, которые нам нужно извлечь из таблиц, после ключевого слова AS.
  • Наконец, если вы хотите загрузить результаты запроса в материализованное представление, используйте опцию WITH DATA, иначе используйте опцию WITH NO DATA.

В этой статье мы будем использовать пример базы данных проката DVD , описание которой приведено здесь и может быть загружено по этой ссылке .

Пример:

В базе данных dvdrental есть таблица с именем film_category, где все комедийные фильмы имеют category_id равный 4. В этом примере мы будем использовать концепцию материализованного представления, чтобы отфильтровать film_id всех комедийных фильмов в базе данных.

CREATE MATERIALIZED VIEW comedy_movie_list
AS
SELECT film_id FROM film_category where category_id=4 WITH DATA
;

Представление содержит информацию, полученную из таблицы film_category, о фильмах с category_id равным 4.

Теперь, если мы запросим данные в представлении comedy_movie_list следующим образом:

SELECT * FROM comedy_movie_list;

Выход:

Обновление материализованного представления:

Чтобы обновить материализованное представление, мы используем следующую команду:

REFRESH MATERIALIZED VIEW your_view_name;

Пример:

Здесь мы обновим материализованное представление (comedy_movie_list), созданное в приведенном выше примере:

REFRESH MATERIALIZED VIEW comedy_movie_list;

Выход:

Когда вы обновляете данные для материализованного представления, PostgreSQL блокирует всю таблицу, поэтому вы не можете запрашивать данные для нее. Чтобы избежать этого, вы можете использовать опцию CONCURRENTLY.

REFRESH MATERIALIZED VIEW CONCURRENTLY your_view_name;

Обратите внимание, что параметр CONCURRENTLY доступен только в PostgreSQL 9.4.

Удаление материализованного представления:

Чтобы удалить материализованное представление, используйте следующий оператор:

DROP MATERIALIZED VIEW [ IF EXISTS ]  your_view_name;

Пример:

Здесь мы удалим материализованное представление comedy_movie_list , созданное в предыдущем примере:

DROP MATERIALIZED VIEW comedy_movie_list; 

Выход: