当前位置:   article > 正文

postgresql物化视图应用实列介绍_如何给postgres数据库创建物化视图

如何给postgres数据库创建物化视图

目录

 使用场景

创建语法

 使用场景

        物化视图是将数据落地的方法之一,当我们在使用fdw对远端库进行数据链接的时候,此时可以使用物化视图将远端数据库的表数据落地到本地,将会大大增加我们join效率。

创建语法

  1. CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] view_name
  2. [ (column_name [, ...] ) ]
  3. [ USING method ]
  4. [ WITH ( storage_parameter [= value] [, ... ] ) ]
  5. [ TABLESPACE tablespace_name ]
  6. AS query
  7. [ WITH [ NO ] DATA ]
  8. REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] name
  9. [ WITH [ NO ] DATA ]

        创建物化视图时  可以使用USING method methodname 如果methodname 是已经创建好的,将会直接指定已将创建好的methodname 的访问配置,如果你没有指定methodname  那创建的物化视图将使用默认的method heap_tableam_handler,

关于storage_parameter 相关参数的值例举如下

  1. - TABLESPACE - 此选项指定应创建物化视图的表空间。您可以在TABLESPACE关键字后指定表空间的名称。
  2. - FILLFACTOR - 此选项指定物化视图的填充因子。填充因子是一个百分比值,确定每个物化视图页面上应留下多少空间。您可以在FILLFACTOR关键字后指定填充因子。
  3. - AUTOVACUUM - 此选项指定是否应为物化视图启用自动清理。可能的值为ENABLE和DISABLE。如果指定ENABLE,则将为物化视图启用自动清理。如果指定DISABLE,则将为物化视图禁用自动清理。
  4. - WITH OIDS - 此选项指定物化视图是否应包括对象ID。可能的值为TRUEFALSE。如果指定TRUE,则物化视图将包括对象ID。如果指定FALSE,则物化视图将不包括对象ID。
  5. - WITHOUT OIDS - 此选项指定物化视图是否应排除对象ID。可能的值为TRUEFALSE。如果指定TRUE,则物化视图将排除对象ID。如果指定FALSE,则物化视图将不排除对象ID。
  6. - CONNECTION LIMIT - 此选项指定可以连接到物化视图的最大并发连接数。您可以在CONNECTION LIMIT关键字后指定连接限制。
  7. - TABLESPACE - 此选项指定应创建物化视图的表空间。您可以在TABLESPACE关键字后指定表空间的名称。
  8. - WITH - 此选项指定物化视图的各种存储参数。您可以以parameter=value的形式指定存储参数。以下是可以使用的一些存储参数:
  9. - fillfactor - 此参数指定物化视图的填充因子。
  10. - autovacuum_enabled - 此参数指定是否应为物化视图启用自动清理。
  11. - toast_tuple_target - 此参数指定TOAST表每页的目标元组数。
  12. - parallel_workers - 此参数指定可以用于物化视图的并行工作程序数。
  13. - maintenance_work_mem - 此参数指定可用于物化视图维护操作的内存量。
  14. - max_parallel_workers - 此参数指定可以用于物化视图的最大并行工作程序数。
  15. - autovacuum_vacuum_scale_factor - 此参数指定应在自动清理操作期间清理的表大小的分数。
  16. - autovacuum_analyze_scale_factor - 此参数指定应在自动清理操作期间分析的表大小的分数。
  17. - autovacuum_vacuum_cost_limit - 此参数指定自动清理操作的成本限制。
  18. - autovacuum_vacuum_cost_delay - 此参数指定自动清理操作之间的延迟。

可以根据情况进行配置相关参数,多数实际生产应用中使用默认值 不做特殊指定。

当前有一张表text 

将其创建成物化视图

 create materialized view v_dmuser as select  * from  dm_userbehavior_sample ;
 
  1. create materialized view v_dmuser as
  2. select *
  3. from dm_userbehavior_sample where user_id >500 with no data ;
  4. --当使用with no data 参数控制时 此时的物化视图仅仅只是报错了一个表结构 默认情况下时with data 带数据创建

 当使用with no data 改物化视图并不会被允许展示

创建视图时  可以将原来的视图字段进行变更

  1. 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(需要视图中有唯一键,否则无法创建)

        与物化视图相关的系统表  可以查看一在创建物化视图相关的参数配置以及信息。

  1. SELECT *
  2. FROM pg_matviews
  3. WHERE matviewname = 'v_dmuser';
  4. SELECT *
  5. FROM pg_class
  6. WHERE relname = 'v_dmuser';

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/601831
推荐阅读
相关标签
  

闽ICP备14008679号