PostgreSQL定时刷新物化视图的一种简单方法

PostgreSQL 9.3开始支持物化视图,9.4又增加了非阻塞的CONCURRENTLY选项,但REFRESH时却不支持类似START WITH ... NEXT ...的定时刷新选项。

如何实现定时刷新物化视图?百度的结果主要是以下三种:

  • 借助操作系统,如Linux/Unix的crontab或Windows的定时任务;
  • 借助插件pgAgent;
  • 使用触发器,一般为语句级(... FOR EACH STATEMENT ...)。

近日接触到\watch命令,发现了一种新的刷新物化视图的方法。

不多解释,直接上示例代码:

-- 创建物化视图
CREATE MATERIALIZED VIEW MAX_ID_MVIEW
AS
  SELECT PART_ID, MAX(ID)  MAX_ID
  FROM PART_DETAIL GROUP BY PART_ID;

-- 如果刷新时不带CONCURRENTLY则无需创建唯一索引
CREATE UNIQUE INDEX IDX_MAX_ID ON MAX_ID_MVIEW(PART_ID);

-- 利用watch命令每120s刷新一次物化视图
REFRESH MATERIALIZED VIEW CONCURRENTLY MAX_ID_MVIEW; \watch 120

经测试有效,但缺点是需保持在psql窗口一直运行。

原文地址:https://www.cnblogs.com/wggj/p/9929184.html

时间: 2024-10-11 00:06:44

PostgreSQL定时刷新物化视图的一种简单方法的相关文章

Oracle数据库入门——如何根据物化视图日志快速刷新物化视图

Oracle物化视图的快速刷新机制是通过物化视图日志完成的.Oracle如何通过一个物化视图日志就可以支持多个物化视图的快速刷新呢,本文简单的描述一下刷新的原理. 首先,看一下物化视图的结构:SQL> create table t(id number, name varchar2(30), num number);表已创建. SQL> create materialized view log on t with rowid, sequence(id, name) including new v

元素水平居中和垂直居中的几种简单方法

一.如何使元素在水平方向上居中 1. 使用text-align:center. 在父级元素的CSS样式设置text-align:center.把内部嵌套一个div把它当作文本来对待,不过这个方法有时候是不管用的. 2.在需要居中的元素设置margin:0 auto.     这句CSS的意思为:设置margin-left和margin-right为自动适应父级元素宽度.所以可以使元素水平居中,不过记得设置其width. 二.如何使元素在垂直方向上居中 1.使图片在垂直方向上居中. div{bac

WPF编程 ,TextBlock 显示百分数值的一种简单方法。

原文:WPF编程 ,TextBlock 显示百分数值的一种简单方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/86524376 此处是绑定了另一控件的值,也可用于数据绑定的情况,最后格式化一句是关键,? <TextBlock Text="{Binding Value,Mode=OneWay,ElementName=pro2,StringFormat={}{0:p2}}" /&

.net 签名加密实现的一种简单方法

加密方法有很多,以下是其中一种简单的签名模式 1.首先客户端通过webapi按照IP地址,时间戳,随机数生成签名,并传递序列号 private Result_Sign Valid()        {            string ServerIP = "192.168.1.6";// HttpContext.Request.ServerVariables.Get("Local_Addr").ToString(); //地址            string

Python库安装的三种简单方法

我使用的是python3.4 第一种: pip3 install 库名 pip install 库名 第二种:http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应文件的whl,然后直接这样就可以了 第三种,到各种库官方地址下载源代码 转到文件对应目录,直接命令下 python setup.py install 关于三种安装方法,可能用cx-Freeze打包后,程序会缺库,建议把主要的源代码扔到Lib\site-packages下

Qt实现软件自动更新的一种简单方法

前言 最近在学习Qt开发上位机,想实现一个检查更新的功能,网上搜索了一大圈,发现实现过程都很复杂,关键是代码看不懂,所以就自己开发一种简单的方式来实现.实现效果如下: 点击"检查更新"按钮,如果当前版本低于远程的版本,那么会弹出如下窗口,提示更新,并显示远程的的版本号,更新时间,更新说明,如下图所示: 如果点击"去下载",那么会调用系统默认浏览器,直接创建下载任务.点击"不更新",则取消更新. 如果当前版本号和远程一致,那么会提示"已经

刷新物化视图的方法

DBMS_MVIEW provides three different types of refresh operations. DBMS_MVIEW.REFRESH Refresh one or more materialized views. DBMS_MVIEW.REFRESH_ALL_MVIEWS Refresh all materialized views. DBMS_MVIEW.REFRESH_DEPENDENT Refresh all materialized views that

下载文件的一种简单方法js

我在做的一个项目有一部分要下载附件,可是我们公司用了一个包和网上的用response的解决方法冲突,而网上的js解决方法又用到了ActiveXObj我们经理不让用这个.还好我一个同事很利害用了一个很简单的方法,简单到我都吃惊了. window.open(url) /  window.open(url,'_parent'); 这个url是相对路径.比如说你在你的页面work/upload/prea里存储了xx.txt文件 那么下载的这个路径就是url="upload/prea里存储了xx.txt

[ActionScript 3.0] 处理xml内容换行时行间距较大问题的一种简单方法

我们一定遇到过这种情况,在读取xml里的文章内容时,一旦有换行的位置在flash里显示出来的行间距会比较大,而并非我们想要的效果,解决这个问题的方法除了使用正则表达式以外,这里介绍一种比较简单的方法,利用str.split("\r\n").join("\r")方法即可,如下示例: 1 package 2 { 3 import flash.display.Sprite; 4 import flash.text.TextField; 5 import flash.tex