在 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
在第一个函数中执行。
我是 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
在第一个函数中执行。