在PostgreSQL中退出返回JSON的函数时删除临时表



我是PostgreSQL的新手,我想知道为什么我的临时表在返回不同的返回查询后不被删除。

我可以多次执行这个函数,而不需要"表已经存在"。错误。

CREATE OR REPLACE FUNCTION test_table()
RETURNS TABLE (response JSON)
AS $$
BEGIN
CREATE TEMP TABLE temp_test_table AS SELECT * FROM Users;
RETURN QUERY SELECT '{"name": "Moises"}'::JSON;
DROP TABLE temp_test_table;
END; $$
LANGUAGE 'plpgsql';

但是在这个例子中,在第一次执行之后,我收到一个"ERROR: relation "temp_test_json"已经exists" .

CREATE OR REPLACE FUNCTION test_json()
RETURNS JSON
AS $$
BEGIN
CREATE TEMP TABLE temp_test_json AS SELECT * FROM Users;
RETURN '{"name": "Moises"}'::JSON;
DROP TABLE temp_test_json;
END; $$
LANGUAGE 'plpgsql';

当临时表被删除时,return query或只是return如何影响临时表?

RETURN终止函数的执行,因此执行没有到达第二个函数中的DROP TABLE语句。

相反,RETURN QUERY向函数结果集中添加行,但终止执行,因此DROP TABLE在第一个函数中执行。

最新更新