You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL存储过程创建临时表后查询提示表不存在问题求助

问题原因

PostgreSQL的sql语言存储过程会在创建阶段就完成所有语句的全量语义校验,此时你脚本里的newtemptable还未实际创建,因此校验直接失败,抛出relation "newtemptable" does not exist的错误。

解决方案

最通用的解决方式是将存储过程的语言改为plpgsql,PL/pgSQL采用惰性解析机制,只会在执行到对应语句时才校验对象存在性,完全适配「先创建临时表、后查询使用」的逻辑。

修改后的存储过程示例如下:

CREATE OR REPLACE PROCEDURE sp_getworkflow()
LANGUAGE plpgsql
AS $BODY$
BEGIN
  -- 先删再建避免重复调用时表已存在的报错,不需要可以删除这行
  DROP TABLE IF EXISTS newtemptable;
  CREATE TEMP TABLE newtemptable AS 
  SELECT "TXNID", "FILENAME" FROM "oldtable" WHERE "TXNID" = 'abc';
  -- 若需要返回查询结果可以用RETURN QUERY,或者直接写后续业务逻辑
  RETURN QUERY SELECT * FROM "newtemptable";
END;
$BODY$;
补充说明
  • 临时表是会话级别的,仅在创建它的数据库会话中可见,会话断开后会自动删除
  • 如果你需要在同一会话的其他存储过程/语句中使用这个临时表,只要在sp_getworkflow调用完成后再引用即可,不需要重复创建

内容的提问来源于stack exchange,提问作者user3363190

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:36:00