Postgres创建视图不是视图

3

维护从前雇员编写的代码时,发现了一段我无法理解的 SQL 代码:

CREATE OR REPLACE VIEW my_view AS Not a view

官方文档中没有相关信息,我一直在寻找关于这个问题的信息,但是一无所获。

有什么提示吗?


1
我以前从来没见过这个,很期待在这里看到答案。请给这个问题点赞。 - D.Dimitrioglo
你确定这是SQL吗?能展示一下周围的代码吗? - melpomene
4
看起来这是故意试图生成一个错误。 - Gordon Linoff
这在sqlfiddle上失败了 http://sqlfiddle.com/#!15/5b08e1/1 - Florian Moser
1个回答

3

视图已删除。

您的脚本是由一个使用pg_get_viewdef(view_oid)的应用程序生成的。当没有给定oid的视图时,该函数返回字符串not a view。简单测试:

create view my_view as select 1;

select oid 
from pg_class 
where relname = 'my_view';

  oid   
--------
 151388
(1 row)

select pg_get_viewdef(151388);

 pg_get_viewdef 
----------------
  SELECT 1;
(1 row)

drop view my_view;

select pg_get_viewdef(151388);

 pg_get_viewdef 
----------------
 Not a view
(1 row) 

请注意,这并不意味着my_view不存在。如果重新创建视图,它将具有另一个oid。唯一确定的结论是您的脚本不是最新的(与数据库当前内容不一致)。为了解决问题,您应该以SQL格式转储(dump)模式,例如:
pg_dump --schema-only --format=plain my_database > my_database.dump

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接