赞
踩
目录
物化视图是将数据落地的方法之一,当我们在使用fdw对远端库进行数据链接的时候,此时可以使用物化视图将远端数据库的表数据落地到本地,将会大大增加我们join效率。
- CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] view_name
- [ (column_name [, ...] ) ]
- [ USING method ]
- [ WITH ( storage_parameter [= value] [, ... ] ) ]
- [ TABLESPACE tablespace_name ]
- AS query
- [ WITH [ NO ] DATA ]
-
-
-
- REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] name
- [ WITH [ NO ] DATA ]
创建物化视图时 可以使用USING method methodname 如果methodname 是已经创建好的,将会直接指定已将创建好的methodname 的访问配置,如果你没有指定methodname 那创建的物化视图将使用默认的method heap_tableam_handler,
关于storage_parameter 相关参数的值例举如下
- - TABLESPACE - 此选项指定应创建物化视图的表空间。您可以在TABLESPACE关键字后指定表空间的名称。
-
- - FILLFACTOR - 此选项指定物化视图的填充因子。填充因子是一个百分比值,确定每个物化视图页面上应留下多少空间。您可以在FILLFACTOR关键字后指定填充因子。
-
- - AUTOVACUUM - 此选项指定是否应为物化视图启用自动清理。可能的值为ENABLE和DISABLE。如果指定ENABLE,则将为物化视图启用自动清理。如果指定DISABLE,则将为物化视图禁用自动清理。
-
- - WITH OIDS - 此选项指定物化视图是否应包括对象ID。可能的值为TRUE和FALSE。如果指定TRUE,则物化视图将包括对象ID。如果指定FALSE,则物化视图将不包括对象ID。
-
- - WITHOUT OIDS - 此选项指定物化视图是否应排除对象ID。可能的值为TRUE和FALSE。如果指定TRUE,则物化视图将排除对象ID。如果指定FALSE,则物化视图将不排除对象ID。
-
- - CONNECTION LIMIT - 此选项指定可以连接到物化视图的最大并发连接数。您可以在CONNECTION LIMIT关键字后指定连接限制。
-
- - TABLESPACE - 此选项指定应创建物化视图的表空间。您可以在TABLESPACE关键字后指定表空间的名称。
-
- - WITH - 此选项指定物化视图的各种存储参数。您可以以parameter=value的形式指定存储参数。以下是可以使用的一些存储参数:
-
- - fillfactor - 此参数指定物化视图的填充因子。
-
- - autovacuum_enabled - 此参数指定是否应为物化视图启用自动清理。
-
- - toast_tuple_target - 此参数指定TOAST表每页的目标元组数。
-
- - parallel_workers - 此参数指定可以用于物化视图的并行工作程序数。
-
- - maintenance_work_mem - 此参数指定可用于物化视图维护操作的内存量。
-
- - max_parallel_workers - 此参数指定可以用于物化视图的最大并行工作程序数。
-
- - autovacuum_vacuum_scale_factor - 此参数指定应在自动清理操作期间清理的表大小的分数。
-
- - autovacuum_analyze_scale_factor - 此参数指定应在自动清理操作期间分析的表大小的分数。
-
- - autovacuum_vacuum_cost_limit - 此参数指定自动清理操作的成本限制。
-
- - autovacuum_vacuum_cost_delay - 此参数指定自动清理操作之间的延迟。
可以根据情况进行配置相关参数,多数实际生产应用中使用默认值 不做特殊指定。
当前有一张表text
将其创建成物化视图
create materialized view v_dmuser as select * from dm_userbehavior_sample ;
- create materialized view v_dmuser as
- select *
- from dm_userbehavior_sample where user_id >500 with no data ;
- --当使用with no data 参数控制时 此时的物化视图仅仅只是报错了一个表结构 默认情况下时with data 带数据创建
-
当使用with no data 改物化视图并不会被允许展示
创建视图时 可以将原来的视图字段进行变更
-
- create materialized view v_dmuser(id1,ited) as select user_id , item_id from dm_userbehavior_sample where user_id >500 ;
创建物化视图 和实体表相同,会占用一定的空间
清空物化视图数据,postgresql数据库并不支持truncate ,使用以下语句可以清空物化视图数据
refresh materialized view v_dmuser with no data;
当本文实验的基表dm_userbehavior_sample 数据发生变化时 可以使用将会重新加载数据;
refresh materialized view CONCURRENTLY v_dmuser
当时视图在被刷新的过程中全程会被加上八级锁 基表会被叫上一级锁,并且每一次都会执行全量更新
此时CONCURRENTLY
refresh materialized view CONCURRENTLY v_dmuser
其次需要在物化视图中增加一个 唯一索引才可以使用关键字CONCURRENTLY(需要视图中有唯一键,否则无法创建)
与物化视图相关的系统表 可以查看一在创建物化视图相关的参数配置以及信息。
- SELECT *
- FROM pg_matviews
- WHERE matviewname = 'v_dmuser';
-
- SELECT *
- FROM pg_class
- WHERE relname = 'v_dmuser';
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。