我想知道是否可以在" main函数"中调用的函数之间共享一个临时表,如下所示:
-- some sub function
create or replace function up_sub_function (str text)
returns table (id int, descr text) as $$
begin
return query select * from temp_table where descr like concat('%', str , '%');
end; $$
language plpgsql;
-- main function
create or replace function up_main_function ()
returns table (id int, descr text) as $$
begin
create temporary table temp_table if not exists (
id int,
descr text
);
insert into temp_campaigns select id, descr from test_table;
return query select * from up_sub_function('a');
end; $$
language plpgsql;
BEGIN;
select * from up_main_function();
drop table temp_table;
COMMIT;
如果您能告诉我实现此目的的正确方法,我希望能够填充临时表,然后通过调用main函数内的其他函数来过滤行。
谢谢你快乐的编程! :)
答案 0 :(得分:1)
请参阅文档https://www.postgresql.org/docs/current/static/sql-createtable.html
临时表对整个会话有效。只要你保持与数据库的连接就可以了。
在您的情况下,您只需在交易期间使用它。因此,您应该使用ON COMMIT DROP
create temporary table temp_table if not exists (
id int,
descr text
) ON COMMIT DROP;
创建表后,您可以在当前事务的任何函数中使用它。
您不需要BEGIN
来启动交易。调用外部函数时会自动启动事务。
嵌套函数调用共享同一个事务。所以他们都看到了桌子。