簡體   English   中英

如何在 Postgres/plpgsql 的視圖定義中使用變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM