gpt4 book ai didi

sql - Postgres : Temporary table in function is persistent. 为什么?

转载 作者:行者123 更新时间:2023-11-29 12:29:53 25 4
gpt4 key购买 nike

我的 postgresql 数据库中有以下函数:

CREATE OR REPLACE FUNCTION get_unused_part_ids()
RETURNS integer[] AS
$BODY$
DECLARE
part_ids integer ARRAY;
BEGIN
create temporary table tmp_parts
as
select vendor_id, part_number, max(price) as max_price
from refinery_akouo_parts
where retired = false
group by vendor_id, part_number
having min(price) < max(price);

-- do some work etc etc

-- simulate ids being returned
part_ids = '{1,2,3,4}';
return part_ids;

END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION get_unused_part_ids()
OWNER TO postgres;

这会编译,但是当我运行时:

select get_unused_part_ids();

临时表 tmp_parts 仍然存在。之后我可以对其进行选择。请原谅我,因为我已经习惯了 t-sql/MSSQL 的特定功能。 MSSQL 不会出现这种情况。我做错了什么?

最佳答案

该表只会在 session 结束时被删除。您需要指定 ON COMMIT 选项来删除,它会在事务结束时删除表。

  create temporary table tmp_parts 
on commit drop
as
select vendor_id, part_number, max(price) as max_price
from refinery_akouo_parts
where retired = false
group by vendor_id, part_number
having min(price) < max(price);

关于sql - Postgres : Temporary table in function is persistent. 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com