我有一个处理一些数据的函数:
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 ;
中的
答案 0 :(得分:1)
我认为问题在于Postgres功能分两步处理。在第一步中,编译该函数。在第二个,它被执行。
如果视图不存在,则在编译阶段不会创建它。但是,select
将失败,因为视图不存在。
在函数中创建视图对我来说似乎很奇怪。但是,我可以想到两个解决方法: