PostgreSQL中如何将函数结果存入临时表?报错求助
解决PostgreSQL通过返回表的函数创建临时表的错误
你的错误原因是直接select my_funct('xxx')会把返回表的函数视为单个record类型的列,而非展开为定义的id和name两列,导致创建临时表时触发伪类型错误。以下是两种可行的实现方式:
方法一:通过SELECT * FROM展开函数结果
使用SELECT * FROM调用返回表的函数,让PostgreSQL将函数结果拆解为对应的列:
CREATE TEMP TABLE tmpTable AS SELECT * FROM my_funct('xxx');
注意:PostgreSQL的临时表不需要加#前缀(这是SQL Server的语法),只需通过TEMP关键字声明即可。
方法二:使用表函数语法(PostgreSQL 9.3+)
PostgreSQL 9.3及以上版本支持直接用TABLE关键字调用返回表的函数,写法更简洁:
CREATE TEMP TABLE tmpTable AS TABLE my_funct('xxx');
验证临时表:创建完成后,执行以下语句即可查看结果:
SELECT * FROM tmpTable;
额外优化建议
你的函数参数使用了character类型,该类型是固定长度的字符类型,通常建议使用varchar或text来适配可变长度的字符场景,修改后的函数参数定义如下:
CREATE OR REPLACE FUNCTION my_funct(var_code varchar) RETURNS TABLE(id bigint, name varchar) LANGUAGE 'plpgsql' AS $BODY$ BEGIN RETURN QUERY SELECT Id, Name FROM tbl WHERE Code=var_code; END; $BODY$;
内容的提问来源于stack exchange,提问作者Riyan Afriyanto
相关产品推荐
相关产品推荐

