PostgreSQL - 函数之间的共享临时表

时间:2018-01-17 17:25:14

标签: sql postgresql

我想知道是否可以在" 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函数内的其他函数来过滤行。

谢谢你快乐的编程! :)

1 个答案:

答案 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来启动交易。调用外部函数时会自动启动事务。

嵌套函数调用共享同一个事务。所以他们都看到了桌子。