Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在plpgsql中将查询结果选择为变量_Postgresql_Stored Procedures_Plpgsql - Fatal编程技术网

Postgresql 在plpgsql中将查询结果选择为变量

Postgresql 在plpgsql中将查询结果选择为变量,postgresql,stored-procedures,plpgsql,Postgresql,Stored Procedures,Plpgsql,我正在编写一个PL/PGSQL函数。它涉及处理查询结果。IIRC,从文档中可以看出,selectinto在这个实例中不起作用,但是,可以通过创建临时表来存储查询结果 我运行以下快速测试: create function foo() returns numeric as $body$ begin create temporary table footable as select * from some_table; return 1.23; end; $body$ lan

我正在编写一个PL/PGSQL函数。它涉及处理查询结果。IIRC,从文档中可以看出,
selectinto
在这个实例中不起作用,但是,可以通过创建临时表来存储查询结果

我运行以下快速测试:

create function foo() returns numeric as $body$ 
begin 
  create temporary table footable as 
  select * from some_table; 

  return 1.23; 
end; 
$body$ language plpgsql;
然后,我对其进行了如下运行测试:

select * from foo();
1.23
select * from foo();
ERROR:  relation "footable" already exists
CONTEXT:  SQL statement "create temporary table footable as select * from 
          some_table"
PL/pgSQL function "foo" line 1 at SQL statement
那么,如何将查询结果临时缓存在变量中,以便以后在存储过程中使用


我正在使用第8.4页。

临时表将在当前会话结束时销毁(不是事务)。通过将
CREATE
语句修改为:

创建临时桌脚。。。关于提交丢弃

当然,您不能在每个事务中多次运行此
CREATE
,因为它将为您提供
关系“footable”已存在
错误。

临时表在当前会话结束时被销毁(非事务)。通过将
CREATE
语句修改为:

创建临时桌脚。。。关于提交丢弃

当然,您不能在每个事务中多次运行此
CREATE
,因为它将为您提供
关系“footable”已经存在
错误。

有更多的方法-通常最好的方法是每个会话只创建一次临时表

有更多的方法-通常最好的方法是每个会话只创建一次临时表

在测试设置中,只有在
test3()
的每个会话的第一次调用中才会引发异常。如果您更频繁地遇到异常,我希望它会更慢,就像OP可能会遇到的那样。另外,
其中oid='omega'::regclass
可能比
其中relname='omega'和pg_table_可见(oid)
更快?转换到
regclass
会自动检查可见性。我不确定-test3的一个优点是使用内部缓存而不是完整的SQL查询。强制转换到regclass也会引发异常。您可以刷新此测试-9.2上的某些查询速度更快。在测试设置中,只有在每次
test3()
会话的第一次调用中才会引发异常。如果您更频繁地遇到异常,我希望它会更慢,就像OP可能会遇到的那样。另外,
其中oid='omega'::regclass
可能比
其中relname='omega'和pg_table_可见(oid)
更快?转换到
regclass
会自动检查可见性。我不确定-test3的一个优点是使用内部缓存而不是完整的SQL查询。强制转换到regclass也会引发异常。您可以刷新此测试-在9.2上某些查询可以更快。