在 PostgreSQL 中退出 return a JSON 的函数时删除临时 table

Drop temporary table when exiting function that return a JSON in PostgreSQL

我是 PostgreSQL 的新手,我想知道为什么我的临时 table 在 return 不同于 return 查询后没有被删除。

我可以多次执行此函数而不会出现“table 已存在”错误。

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';

但在这种情况下,在第一次执行后,我收到“错误:关系“temp_test_json”已经存在”。

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 查询或只是 return 如何影响临时 table 何时被删除?

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

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