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

如何在INSERT语句中获取所有新增行的序列值数组?

解决PostgreSQL中INSERT返回所有新增主键ID数组的问题

问题描述

我有一条INSERT语句,可向表中插入单条或多条记录,需要获取每一行新增记录的主键ID值。尝试在INSERT语句中添加以下代码:

RETURNING array_agg(new_seq_id) INTO new_ids

但出现报错:

[42803] ERROR: aggregate functions are not allowed in RETURNING

请问是否有办法通过RETURNING语句获取所有新增序列值的数组?

解决方法

PostgreSQL的RETURNING子句不支持直接使用聚合函数,但可以通过两种方式实现需求:

方法一:利用临时表聚合结果(适合PL/pgSQL场景)

先通过RETURNING将所有新增ID写入临时表,再从临时表聚合为数组:

DECLARE
    new_ids INT[];
BEGIN
    INSERT INTO your_table (col1, col2)
    VALUES ('val1', 'val2'), ('val3', 'val4')
    RETURNING new_seq_id INTO TEMP TABLE temp_ids;
    
    SELECT array_agg(new_seq_id) INTO new_ids FROM temp_ids;
END;

方法二:使用ARRAY()构造函数包裹返回结果

直接用ARRAY()将RETURNING返回的多行ID组装成数组,这种方式更简洁,适用于普通SQL或PL/pgSQL:

-- 普通SQL查询场景
SELECT ARRAY(
    INSERT INTO your_table (col1, col2)
    VALUES ('val1', 'val2'), ('val3', 'val4')
    RETURNING new_seq_id
);

-- PL/pgSQL场景
DECLARE
    new_ids INT[];
BEGIN
    SELECT ARRAY(
        INSERT INTO your_table (col1, col2)
        VALUES ('val1', 'val2'), ('val3', 'val4')
        RETURNING new_seq_id
    ) INTO new_ids;
END;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:15:58