在PostgreSQL中视图占用多少空间?

在PostgreSQL中视图占用多少空间?,postgresql,view,size,storage,Postgresql,View,Size,Storage,如果我将查询结果存储为视图,与具有查询结果的表相比,它会占用更多的内存空间吗 关于视图的另一个问题是,我可以基于存储为视图的查询结果创建新查询吗?视图不存储查询结果,而是存储查询 某些RDBMS允许存储查询结果(对于某些查询):这在Oracle中称为物化视图,在sqlserver中称为索引视图 PostgreSQL不支持这些(不过,正如@CalvinCheng提到的,您可以使用触发器或规则模拟这些) 是的,您可以在查询中使用视图。但是,视图只是按名称引用复杂查询的方便方式,而不是存储查询结果的方

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


关于视图的另一个问题是,我可以基于存储为视图的查询结果创建新查询吗?

视图不存储查询结果,而是存储查询

某些RDBMS允许存储查询结果(对于某些查询):这在
Oracle
中称为物化视图,在
sqlserver
中称为索引视图

PostgreSQL
不支持这些(不过,正如@CalvinCheng提到的,您可以使用触发器或规则模拟这些)


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

对于问题1

要回答第一个问题,您不能将查询结果存储为视图,但可以使用PostgreSQL的
trigger
功能实现类似的功能

PostgreSQL支持以本机方式创建
视图
,但不支持创建
物化视图
(存储结果的视图)-但这可以使用触发器处理。看

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

对于问题2

要回答第二个问题,要在postgresql中更新视图,需要使用
CREATE RULE
-

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


PostgreSQL视图是一个已保存的查询。创建后,从视图中选择与从原始查询中选择完全相同,每次都返回查询。因此视图不会占用内存

您不能将查询结果存储为视图,视图只是查询,但可以使用物化视图实现类似的功能。物化视图它们仅在需要时更新。第二,必须更新整个物化视图;无法仅更新单个过时行


所以,在这种情况下,每当发生会使行无效的更改时,您必须急切地更新视图。这可以通过触发器来完成。

我想指出,从Postgres 9.3开始,物化视图存储查询定义和结果,简单视图仅存储查询定义
PostgreSQL
不支持物化视图。@f.ashouri当你说“内存”时,根本不清楚你指的是RAM还是磁盘存储。如果您的意思是RAM:视图对RAM没有影响;就像您编写了在子查询中定义视图的基础
SELECT
。@Quassnoi-确实
PostgreSQL
不支持物化视图。但是,可以通过使用触发器实现物化视图的功能。再见,谢谢。如果我使用
trigger
并在数据库中有查询结果,那么硬盘中的实际存储空间是多少?它会比具有相同数据的表小吗?@f.ashouri:
触发器
不会占用任何明显的额外“磁盘存储”,因为它实际上不是
物化视图
。触发器所做的一切就是在特定事件发生时在运行时设置特定的查询,例如请求来自预先创建的视图的结果的查询。请参阅
PostgreSQL
在撰写本文时不支持true
物化视图
,因此在
视图
上使用
触发器
基本上是一种解决方法。我应该指出,物化视图在PostgreSQL 9.3中可用。