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

如何让PL/pgSQL函数返回record[]类型的记录数组

解决方案

你遇到的报错核心原因是 PL/pgSQL 不支持返回匿名的record[]类型,匿名record没有预定义的结构,PL/pgSQL的类型系统无法识别处理。你只需要提前定义明确的复合类型替代匿名record即可,同时修正原函数中缺少RETURN QUERY的语法问题。

步骤1:创建自定义复合类型

对应你要聚合的员工字段结构,创建明确的复合类型:

CREATE TYPE employee_agg AS (
    id int,
    name text
);

步骤2:修改PL/pgSQL函数

将返回值中的数组类型改为自定义的employee_agg[],同时在array_agg中显式将员工行转为该复合类型,并且加上RETURN QUERY将查询结果作为函数返回:

CREATE OR REPLACE FUNCTION _test()
    RETURNS table(id integer, name text, agg employee_agg[]) 
    LANGUAGE plpgsql
AS $BODY$
begin
    RETURN QUERY
    SELECT 
        employer.id, 
        employer.name, 
        array_agg((employee.id, employee.name)::employee_agg)
    FROM employer
    LEFT JOIN employer_employee_join
    ON employer_employee_join.employer_id = employer.id
    LEFT JOIN employee
    ON employee.id = employer_employee_join.employee_id
    GROUP BY employer.id;
end;
$BODY$;

测试调用

直接执行即可得到预期结果:

SELECT * FROM _test();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:24:02