📜  PostgreSQL – 物化视图

📅  最后修改于: 2022-05-13 01:57:15.369000             🧑  作者: Mango

PostgreSQL – 物化视图

在 PostgreSQL 中,物化视图是可以物理存储数据的视图。如果需要快速访问数据,通常会选择这些。物化视图缓存复杂查询(需要大量计算和操作)的结果,并进一步支持缓存数据的刷新。物化视图由数据库查询定义,类似于 PostgreSQL 中的视图。

在本文中,我们将详细研究 PostgreSQL 物化视图。

创建物化视图:

以下语句用于在 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; 

输出: