标签: materialized-views

334
推荐指数
8
解决办法
65万
查看次数

PostgreSQL中的计算/计算/虚拟/派生列

PostgreSQL是否支持计算/计算列,如MS SQL Server?我在文档中找不到任何内容,但由于此功能包含在许多其他DBMS中,我认为我可能会遗漏某些内容.

例如:http://msdn.microsoft.com/en-us/library/ms191250.aspx

postgresql materialized-views calculated-columns sql-view generated-columns

92
推荐指数
4
解决办法
8万
查看次数

使用规则或通知自动刷新实例化视图

我在PostgreSQL 9.3数据库上有一个物化视图,该数据库很少发生变化(大约每天两次).但是当它发生时,我想及时更新其数据.

以下是我到目前为止的想法:

有一个物化视图mat_view,它从表中获取数据table1table2使用一些连接语句.

无论何时进入table1table2更改,我已经有一个触发器更新一个config由...组成的配置表

table_name | mat_view_name | need_update
-----------+---------------+------------
table1     | mat_view      | TRUE/FALSE
table2     | mat_view      | TRUE/FALSE
Run Code Online (Sandbox Code Playgroud)

因此,如果有任何table1更改(每个语句的UPDATE和DELETE都有触发器),need_update则第一行中的字段设置为TRUE.同样适用table2于第二行.

显然,如果need_update为TRUE,则必须刷新实体化视图.

更新:由于物化视图不支持规则(如下面评论中提到的@pozs),我会更进一步.我创建了一个v_mat_view带有定义" SELECT * FROM mat_view" 的虚拟视图.当用户在此视图上执行SELECT时,我需要创建一个ON SELECT规则,它执行以下操作:

  • 检查是否mat_view应该更新(SELECT 1 FROM config WHERE mat_view_name='mat_view' AND need_update=TRUE)
  • 用...重置need_update标志UPDATE config SET need_update=FALSE where mat_view_name='mat_view'
  • REFRESH MATERIALIZED VIEW …

postgresql triggers materialized-views postgresql-9.3

60
推荐指数
2
解决办法
4万
查看次数

如何刷新oracle中的物化视图

我尝试使用以下方法刷新物化视图:

DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')
Run Code Online (Sandbox Code Playgroud)

但是它抛出了无效的sql语句.

然后我创建了一个这样的存储过程:

CREATE OR REPLACE 
PROCEDURE MAT_VIEW_FOO_TBL 
IS
BEGIN
   DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')
END MAT_VIEW_FOO_TBL IS;
Run Code Online (Sandbox Code Playgroud)

此过程已成功创建,但在我调用此过程时

MAT_VIEW_FOO_TBL;
Run Code Online (Sandbox Code Playgroud)

它再次抛出错误.

请为此问题提出解决方案.

谢谢,Srinivas

oracle materialized-views

53
推荐指数
6
解决办法
33万
查看次数

物化视图与表格:有什么优势?

我很清楚为什么物化视图比查询基表更可取.不仅仅是创建另一个具有与MV相同数据的表的优势还不是很清楚.MV的唯一优势是否只是易于创建/维护?

是不是MV等效于具有匹配模式的表和使用MVs SELECT语句的INSERT INTO?

意思是,您可以按如下方式创建MV

CREATE MATERIALIZED VIEW ... AS
SELECT * FROM FOO;
Run Code Online (Sandbox Code Playgroud)

您可以创建一个等效表:

CREATE TABLE bar (....);
INSERT INTO bar 
SELECT * FROM FOO;
Run Code Online (Sandbox Code Playgroud)

并不是说创造/维护的便利性不足,我只是想确保我没有遗漏任何东西.

sql oracle materialized-views

46
推荐指数
8
解决办法
6万
查看次数

如何确保物化视图始终是最新的?

我需要调用REFRESH MATERIALIZED VIEW所涉及的表的每次更改,对吧?我很惊讶在网上找不到这方面的讨论.

我应该怎么做呢?

我认为答案的上半部分是我正在寻找的:https://stackoverflow.com/a/23963969/168143

这有什么危险吗?如果更新视图失败,是否会回滚调用更新,插入等事务?(这是我想要的......我想)

postgresql materialized-views

43
推荐指数
2
解决办法
2万
查看次数

是否可以在MySQL中建立索引视图?

从2005年开始在MySQL论坛上发帖,但没有比这更新的了.基于此,这是不可能的.但是很多都可以在3 - 4年内改变.

我正在寻找的是一种方法,在视图上有一个索引,但是查看的表仍然没有索引.索引会损害写入过程,并且会经常写入此表(直到索引将所有内容减慢到爬行的程度).但是,缺少索引会使我的查询变得非常缓慢.

mysql sql views materialized-views indexed-view

30
推荐指数
2
解决办法
3万
查看次数

如何在pg_restore期间阻止物化视图刷新?

我使用"自定义"格式(-Fc)的pg_dump创建了数据库转储.此格式允许使用"jobs"选项(-j8)调用pg_restore.作业选项启动8个进程,并在10分钟内恢复数据库中的绝大多数关系.

我留下了4个进程.其中一个是物化视图的刷新,另外三个是应用于物化视图用作数据源的3个表的索引.索引根据pg_stat_activity"等待",可能是因为REFRESH物化视图仍在访问源表.

索引到位后,视图的刷新只需几分钟.因为索引在这期间没有到位,所以REFRESHREFRESH在17小时后关闭了这个过程,这使得pg_restore失败了.

我怎么能够

  1. 强制项的顺序,以便首先创建索引
  2. 关闭实体化视图的刷新并稍后手动完成
  3. 以自定义格式操作转储文件以说"没有数据"
  4. 拦截REFRESH MATERIALIZED VIEW声明并将其扔进垃圾桶

或任何其他完成工作的解决方案?

postgresql materialized-views postgresql-9.3

23
推荐指数
2
解决办法
4196
查看次数

物化视图 - 识别上次刷新

我目前访问了一系列观点和物化观点.具体化由第三方维护,第三方提供关于实现的频率和成功的信息很少.最近,物化视图无法刷新,我发送了大量报告,其中包含不正确/延迟的数据.

目前我正在查询我打算用什么来确定何时在事务系统中发生最新更新,如果它还没有刷新,那么剩下的代码就不会执行,但是这会浪费很多精力并且有时会导致一个不正确的假设(物化视图可能已刷新,但没有进行额外的事务 - 因此代码的其余部分不执行),我宁愿另一种方法.

有没有办法确定是否使用Oracle系统表刷新了物化视图?如果没有,有没有人有任何想法我怎么会这样做,而不必联系第三方?

oracle materialized-views

21
推荐指数
2
解决办法
8万
查看次数

是否有postgres命令列出/删除所有物化视图?

我在我的代码中创建了多个视图,每次运行代码时,我都想删除到目前为止生成的所有物化视图.是否有任何命令会列出Postgres的所有物化视图或删除所有这些视图?

database postgresql ddl materialized-views

20
推荐指数
1
解决办法
1万
查看次数