VIEWS在PostgreSQL中占用多少空间?

f.a*_*uri 4 postgresql size storage view

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

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

Qua*_*noi 6

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

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

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

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

  • @Quassnoi - "PostgreSQL"确实不支持物化视图.但是,可以通过使用触发器来实现物化视图所执行的操作.请参阅http://wiki.postgresql.org/wiki/Materialized_Views (2认同)

Cal*_*eng 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 定义应用于指定表或视图的新规则。CREATE OR REPLACE RULE 将创建新规则,或替换同一表的同名现有规则。

  • 我应该指出,物化视图在 PostgreSQL 9.3 中可用。 (3认同)
  • @f.ashouri:`trigger` 不会在任何程度上占用额外的“磁盘存储”,因为它实际上不是一个“物化视图”。“trigger”所做的只是在发生特定事件时在运行时触发特定查询,例如从预先创建的视图中请求结果的查询。请参阅http://michael.otacoo.com/postgresql-2/postgres-trigger-for-beginners/`PostgreSQL`在撰写本文时不支持真正的`物化视图`,因此在`视图上使用`trigger` ` 本质上是一种解决方法。 (2认同)