在postgresql函数中创建一个视图

时间:2015-07-26 11:57:38

标签: sql postgresql

我有一个处理一些数据的函数:

CREATE OR REPLACE FUNCTION A(x integer, y timestamp with time zone, z integer[])
      RETURNS SETOF typea AS

$BODY$
SELECT *
FROM func1($1,$2,$3) as a
WHERE ...


$BODY$
LANGUAGE sql VOLATILE

如何转换查询:

SELECT *
FROM func1($1,$2,$3) as a
WHERE ...

进入VIEW? 问题是func1需要函数A参数......

我现在拥有的是:

CREATE OR REPLACE FUNCTION A(x integer, y timestamp with time zone, z integer[])
      RETURNS SETOF typea AS
$BODY$
CREATE OR REPLACE VIEW   myView as (select * from  func1($1,$2,$3));
select * from myView ;
$BODY$
LANGUAGE sql VOLATILE

我得到了

  

错误:关系" myView"不存在

select * from myView ;

中的

1 个答案:

答案 0 :(得分:1)

我认为问题在于Postgres功能分两步处理。在第一步中,编译该函数。在第二个,它被执行。

如果视图不存在,则在编译阶段不会创建它。但是,select将失败,因为视图不存在。

在函数中创建视图对我来说似乎很奇怪。但是,我可以想到两个解决方法:

  • 在创建函数之前,确保视图存在
  • 使用动态SQL访问函数中的视图。