VIEWS在PostgreSQL中占用多少空间?

时间:2012-11-13 09:49:11

标签: postgresql view size storage

如果我将查询结果存储为视图,与具有查询结果的表相比,是否会占用更多内存空间?

关于视图的另一个问题是,我可以根据存储为视图的查询结果获得新查询吗?

4 个答案:

答案 0 :(得分:6)

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

某些RDBMS允许存储查询结果的方式(对于某些查询):Oracle中的实体化视图和{{1}中的索引视图 }}

SQL Server不支持这些(但是,正如@CalvinCheng所提到的,你可以使用触发器或规则来模拟那些)。

是的,您可以在查询中使用视图。但是,视图只是通过名称引用复杂查询的便捷方式,而不是存储结果的方法。

答案 1 :(得分: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

  

CREATE RULE定义了一个适用于指定表或视图的新规则。创建或替换规则将创建新规则或替换   同一个表的同名现有规则。

答案 2 :(得分:0)

PostgreSQL视图是一个保存的查询。创建后,从视图中选择与从原始查询中选择完全相同,每次都返回查询。所以观点不占用记忆。

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

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

答案 3 :(得分:0)

我想指出的是,自Postgres 9.3起,物化视图are supported