我在'on commit drop'选项中使用函数中的临时表。我的问题是,在某些情况下,更多的全局函数可以调用第一个函数两次,因此在提交之前调用两次“create temp table” - 所以我有正常的错误“relation [my_temp_table]已经存在”。退出函数时删除临时表
我在函数的末尾使用临时表来返回其在“返回查询”中的行,所以在离开函数之前我不能手动删除表。
CREATE OR REPLACE FUNCTION my_function(_value text)
RETURNS setof my_table AS $$
DECLARE
resultCount integer := 0;
BEGIN
create temp table my_temp_table on commit drop as
select *
from my_table
where value = _value ;
select count(*) into resultCount from my_temp_table;
if (resultCount = 0) then
raise exception 'value not found';
end if;
return query
select * from my_temp_table;
END;$$ LANGUAGE plpgsql VOLATILE COST 100;
ALTER FUNCTION my_function(text) OWNER TO postgres
如果你想知道为什么我用一个临时表,而不是MY_TABLE直接的方式,那是因为我需要一个非常快速的响应和MY_TABLE是非常大的(几十几百万行),所以这样我可以要求它只有一次而不是三次(搜索,计数和返回)。
我找到了一个不使用临时表和创建类型的解决方法,但my_table的结构会改变很多次,实际上我有几十个“我的表”和有关“我的函数”,所以这是一种方法每次我的表格结构都会改变时,不要再写所有的函数。
函数必须返回与它请求的表相同的结构。
如何在离开功能时放下桌子?还是有更好的解决方法?
非常感谢这是完美的! –
此代码会引发错误。 –