关于PostgreSQL中的视图和物化视图

视图是什么?

总之,这就是“虚拟表”。它是一种能够像处理表一样处理指定SELECT语句结果的机制。

视野的优点

可以省去每次编写复杂的SELECT语句。

建议:观点的不足之处

处理速度很慢。因为视图不具备实体数据,所以每次执行上述查询时,将会被替换为视图中定义的SELECT语句并执行。

创建视图语法

CREATE VIEW ビュー名 AS SELECT;

实际的例子

让我们来创建下面的视图。

CREATE VIEW test_view AS 
SELECT t1.id, t1.name, t1.age, t2.address, t2.city, t3.job
FROM sample_table1 AS t1
JOIN sample_table2 AS t2 ON t1.id = t2.id
JOIN sample_table3 AS t3 ON t1.id = t3.id
WHERE t1.age < 25 AND t2.city = '東京';

通过这个功能,您可以不必每次都写出在”AS”之后所指定的SELECT语句,而是可以通过下面的简单查询来执行。

select * from test_view;

另外,需要注意的是,视图是只读的,不能对视图进行插入、更新和删除操作。
此外,如果具有对视图的引用权限,则无需考虑对原始表的引用权限。

物質化视图是什么意思?

PostgreSQL也有一种称为物化视图的机制,简称为Mat-View。
这一功能是从PostgreSQL 9.3版本开始实现的。

事实上,视图并不具有数据的实体性,而材料化视图特点在于缓存和保持目标数据作为实体。

直接用中国语言翻译,通过使用Materview获得的好处。

・可以避免编写复杂的SELECT语句。
・由于具有数据实体,所以比视图处理速度更快。

马特杜伊的缺点

如果原始表发生更改,物化视图仍保持旧数据,需要手动更新。

创建MateView的语法如下:

除了写MATERIALIZED这个单词之外,其他都与创建视图相同。

CREATE MATERIALIZED VIEW マテリアライズドビュー名 AS SELECT;

一个真实的例子

让我们尝试创建下面的材料视图。

CREATE MATERIALIZED VIEW test_mate_view AS 
SELECT t1.id, t1.name, t1.age, t2.address, t2.city, t3.job
FROM sample_table1 AS t1
JOIN sample_table2 AS t2 ON t1.id = t2.id
JOIN sample_table3 AS t3 ON t1.id = t3.id
WHERE t1.age < 25 AND t2.city = '東京';

当统计数量时,结果显示为8件。

select count(*) from test_mate_view;

在这8条数据中删除了2条记录,再次运行后仍然保持8条不变。
为了将表的实体反映到物化视图中,需要执行以下命令。

REFRESH MATERIALIZED VIEW マテリアライズドビュー名;

只需要一种选择的中国翻译:
这次的情况是

REFRESH MATERIALIZED VIEW test_mate_view;
select count(*) from test_mate_view;

当再次执行时,获取了6条数据。

帕拉夫热视角的补充说明

在PostgreSQL中,刷新(REFRESH MATERIALIZED VIEW)物化视图的更新是完全刷新,即重新更新所有记录的行为。在OracleDB中,可以进行增量刷新,但在PostgreSQL中,这个功能尚未实现。