【问题标题】:postgresql query returned successfully with no result while creating view创建视图时,postgresql 查询成功返回,但没有结果
【发布时间】:2016-03-29 07:19:23
【问题描述】:

我已经从表中创建了一个视图

CREATE VIEW dp_val_view
AS
select dp_id,dp_id,dp_s,dp_n,dp_ord,id,answer,date,eny_date
from
 (
    select select dp_id,dp_id,dp_s,dp_n,dp_ord,id,answer,date,eny_date,row_number(*)
    over (partition by dp_id ,dp_ord ,id order by eny_date desc ) as rn
    from values 
 ) dt
where rn < 2 

视图创建成功,我得到的查询成功返回,但没有结果...之后,当我尝试访问表数据时,请刷新表。这是否意味着表中的值被插入到后台视图中?

【问题讨论】:

  • 你期待什么结果? “成功返回但没有结果”似乎是正确的。此外,视图并没有在任何地方物理存储表数据,因此没有后台插入。您在哪里看到“请刷新表格”的文字?

标签: sql postgresql view postgresql-9.2


【解决方案1】:

视图只是查询的“捷径”。运行create view 时,没有数据存储在(常规)视图中,也没有“插入”数据。

而且因为create view 仅将查询 存储在数据库中,它不会“返回”任何结果,就像create table 不会从该表返回任何结果一样。

当您从视图中选择时,数据库会运行基础查询。这与您直接运行查询完全相同。

【讨论】:

    【解决方案2】:

    视图只是包装器,或者换句话说,我们可以说更长查询的别名。

    没有任何东西被插入到视图中,当您查询视图时,它会在内部执行您指定的选择查询。

    手册中有很好的解释http://www.postgresql.org/docs/9.2/static/sql-createview.html

    视图没有物理具体化。相反,每次在查询中引用视图时都会运行查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多