PostgreSQL函数调用报错:返回record类型与预期uuid类型不匹配
错误原因
报错核心是RETURN QUERY后的查询语句写法错误:
你在w.id和w.my_column外层额外加了圆括号,PostgreSQL会将括号包裹的多字段解析为单个匿名record类型的单列,而非两个独立列。最终查询只返回1个record类型列,和函数定义的返回结构(第1列为uuid类型、第2列为text类型)完全不匹配,因此抛出类型错误。
补充:PostgreSQL中
(col1, col2)属于行构造器语法,作用是将多个字段组合为单个复合/记录类型值,和直接书写多列返回的结构有本质区别。
修复方法
去掉SELECT子句中列外层的多余括号即可,修正后的函数定义如下:
CREATE OR REPLACE FUNCTION public.export_wizard() RETURNS TABLE(id uuid, my_column text) LANGUAGE plpgsql AS $function$ BEGIN RETURN QUERY SELECT w.id, w.my_column FROM wizard w; END; $function$ ;
验证步骤
- 执行上述修正后的SQL完成函数重定义
- 运行调用语句
select * from export_wizard();,即可正常返回结构匹配的结果集,第一列为uuid类型的id,第二列为text类型的my_column。
内容的提问来源于stack exchange,提问作者rafineria888wp
相关产品推荐
相关产品推荐

