视图
前言
当SQL语句比较复杂且需要反复执行时,如果每次都要重新编写SQL就会比较麻烦,可以用视图(View)来简化SQL。
查看视图
- psql查看单个视图
\d view_name
- 列出当前schema中的所有视图
SELECT table_name
FROM information_schema.tables
WHERE table_type = 'VIEW'
AND table_schema = current_schema();
创建视图
create view view_name as
select col1, col2 ...
from table_name
where [condition];
删除视图
DROP VIEW IF EXISTS view_name;
更新视图
视图只是逻辑概念,如果要更新视图的定义,可以直接删掉再重新创建。
可以通过视图执行DML操作,但不是所有的视图都可以执行DML,视图定义稍微复杂点就执行不了。
-- 简单的视图还能执行DML
update view1 set sal=sal+100
临时视图
Postgres中有临时视图,在当前会话结束时,临时视图就会被自动删除。
create or replace temporary tempview as ...
物化视图
视图本身是一个虚表,并不包含数据。如果视图可以缓存数据,那么通过视图进行查询可以提高查询的性能。
创建物化视图
create or replace materialized view mview as ...
物化视图创建时查询结果会被缓存起来,后来再查询物化视图就会直接返回缓存的结果集。物化视图的数据需要手动刷新
refresh materialized view mview;
在刷新物化视图时会锁表,如果物化视图上有唯一索引,可以使用concurrently关键字避免锁表
-- 在物化视图上创建唯一索引
create unique index myview_unique on mview(<column name>);
-- 刷新物化视图
refresh materialized view concurrently mview;
删除物化视图
drop materialized view mview;