【问题标题】:Drop temporary table when exiting function that return a JSON in PostgreSQL退出在 PostgreSQL 中返回 JSON 的函数时删除临时表
【发布时间】:2021-09-04 00:36:04
【问题描述】:

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

但在这种情况下,第一次执行后,我收到“错误:关系“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 query 或 just return 如何影响临时表被删除?

【问题讨论】:

    标签: postgresql postgresql-10


    【解决方案1】:

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

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

    【讨论】:

    • 然后,如果返回查询不是最终返回,我假设在函数检索任何数据之前总是会删除临时表。
    • 不,结果缓存在内存中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多