2012-11-13 32 views
1

如果我将查询结果保存为意见与包含查询结果的表相比,它是否会占用更多空间:
关于视图的另一个问题是,我可以基于存储为视图的查询结果来创建新的查询吗?views - 多少空间?

回答

3

问题1

要回答你的第一个问题,你不能查询结果存储为意见,但你可以使用PostgreSQL的trigger功能实现类似的功能。

PostgreSQL本地支持创建views,但不创建materialized views(存储结果的视图) - 但可以使用触发器来处理。请参阅http://wiki.postgresql.org/wiki/Materialized_Views

视图不占用RAM(“内存”)。

问题2

并回答第二个问题,要更新PostgreSQL的视图,您需要使用CREATE RULE - http://www.postgresql.org/docs/devel/static/sql-createrule.html

创建规则定义应用到新规则指定的表或视图。创建或替换规则将创建一个新的规则,或替换同一个表的同名现有规则。

+0

谢谢。如果我使用'trigger'并在我的数据库中有查询结果,那么我的硬盘上的实际存储量是多少?它会少于具有相同数据的表吗? –

+2

@ f.ashouri:'trigger'在很大程度上并不占用额外的“磁盘存储空间”,因为它实际上不是“物化视图”。所有'trigger'都是在运行时在特定事件发生时引发特定查询,例如查询从预先创建的视图中请求结果。请参阅http://michael.otacoo.com/postgresql-2/postgres-trigger-for-beginners/在撰写本文时,PostgreSQL不支持真正的“实体化视图”,所以在视图上使用'trigger' '本质上是一种解决方法。 –

+1

我应该指出,物化视图在PostgreSQL 9.3中可用。 –

5

视图不存储查询结果,它们存储查询。

有些RDBMS允许的方式来存储查询结果(对于一些查询):这就是所谓的Oracle索引视图中SQL Server物化视图

PostgreSQL不支持这些(尽管@CalvinCheng提到,你可以使用触发器或规则来模拟这些)。

是的,您可以在查询中使用视图。然而,视图仅仅是一种通过名称来引用复杂查询的便捷方式,而不是存储其结果的方式。

+1

@ f.ashouri:物化视图存储查询定义和结果,简单视图只存储查询定义。 'PostgreSQL'不支持实体化视图。 – Quassnoi

+1

@ f.ashouri当你说“内存”时,如果你的意思是内存或磁盘存储,它一点也不清楚。如果你的意思是RAM:视图对RAM没有影响;就好像你编写了在子查询中定义视图的底层'SELECT'。 –

+2

@Quassnoi - 'PostgreSQL'确实不支持实体化视图。但是,可以通过使用触发器来实现物化视图。请参阅http://wiki.postgresql.org/wiki/Materialized_Views –

0

PostgreSQL视图是保存的查询。一旦创建,从视图中选择与从原始查询中选择完全一样,它每次都会返回查询。所以意见不占用记忆。

不能将查询结果存储为视图,视图只是查询,但可以使用物化视图实现类似的功能。物化视图只会按需更新。其次,整个物化视图必须更新;没有办法只更新一个陈旧的行。

因此,在这种情况下,只要发生会使行无效的更改,就必须急切地更新视图。它可以通过触发器完成。