[英]How to use variable in view definition in Postgres/plpgsql
我將 plpgsql 與 Postgres 10.6 一起使用。 我有一個 function 聲明變量並為其賦值。 那 function 也定義了一個視圖,我想在定義中使用變量。
create view myview as
select
some_columns
from
mytable
where
id = _id /*_id is declared earlier in function */
;
在這種情況下,可以定義function,但運行時報錯: UndefinedColumn: column "_id" does not exist
在 Postgres 中這樣的事情是可能的嗎? 視圖可以將變量作為其定義的一部分嗎?
我確實在這里看到,在 BigQuery(我從未使用過)中,我所要求的是不可能的,這讓我認為在 plpgsql 中也可能不可能。
這沒什么大不了的,但我很好奇。 一種解決方法(可能是推薦的解決方案)是在我從視圖中傳遞 _id 時 select (例如select * from myview where id = 3
)。 或者,如果我真的想保持 select 調用簡單(我這樣做,因為我的實際實現更復雜並且有多個變量),我可以將視圖定義為字符串並在 function 中使用execute
(這都是內部的東西用於建立和創建數據庫,而不是在動態 sql 固有的各種風險是一個問題的情況下)。
不,您不能將變量傳遞給視圖。 但是你可以用 function 做到這一點:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.