如何解决如何在Postgres / plpgsql的视图定义中使用变量
我在Postgres 10.6中使用plpgsql。我有一个声明并为变量赋值的函数。该函数还定义了一个视图,我想在定义中使用该变量。
create view myview as
select
some_columns
from
mytable
where
id = _id /*_id is declared earlier in function */
;
在这种情况下,可以定义函数,但是在运行该函数时会出现错误:UndefinedColumn: column "_id" does not exist
在Postgres中有这种可能吗?视图是否可以将变量作为其定义的一部分?
我确实看到here,在BigQuery(我从未使用过)中,我所问的是不可能的,这使我认为在plpgsql中也不可能。
这没什么大不了,但我很好奇。一种解决方法-可能是推荐的解决方案-是在我从视图中选择时传递_id(例如select * from myview where id = 3
)。或者,如果我真的想保持select调用简单(之所以这样做,是因为我的实际实现更加复杂并且具有多个变量),则可以将视图定义为字符串,并在函数内使用execute
(是在构建和创建数据库时使用的所有内部工具,而不是担心动态sql固有的各种风险的情况。
解决方法
否,您不能将变量传递给视图。但是您可以使用以下功能来实现此目的:
create function my_view_function(p_id integer)
returns table (id int,column_1 int,column2 text)
as
$$
select id,column_1,column_2
from my_table
where id = p_id;
$$
language sql
stable;
然后像这样使用它
select *
from my_view_function(42);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。