arrays - 如何从 Postgres 函数返回新创建的 ids 数组?

标签 arrays postgresql plpgsql

我正在使用 postgres 函数在表中插入多行。 我必须返回插入行的所有 ID。

我的函数如下

    CREATE OR REPLACE FUNCTION insert_multiple_rows(temp integer)
        RETURNS integer[]
        LANGUAGE 'plpgsql'
        VOLATILE
        PARALLEL UNSAFE
        COST 100
    AS $BODY$DECLARE
    company_ids_list integer[];
    BEGIN
    INSERT INTO company VALUES
    (default,now(),temp),
    (default,now(),temp),
    (default,now(),temp),
    (default,now(),temp)
     RETURNING id INTO company_ids_list;

    RETURN company_ids_list;
    END;
    $BODY$;

当我尝试使用

调用此函数时
 select insert_multiple_rows(58);

获取错误

ERROR:  query returned more than one row
CONTEXT:  PL/pgSQL function create_company_budget_allocation(integer) 
line 4 at SQL statement
SQL state: P0003

最佳答案

SELECT .. INTOINSERT ... RETURNING ... INTO 只能填充单个变量。如果查询返回多行,您将收到您观察到的错误。

您可以在 CTE 中使用 INSERT 语句并使用 array_agg 构造结果数组:

WITH ins AS (
   INSERT INTO company VALUES
      (default,now(),temp),
      (default,now(),temp),
      (default,now(),temp),
      (default,now(),temp)
   RETURNING id)
SELECT array_agg(id) INTO company_ids_list
FROM ins;

关于arrays - 如何从 Postgres 函数返回新创建的 ids 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50481646/

相关文章:

javascript - 如果值不匹配,则 Angular 过滤器

python numpy - 有更快的卷积方法吗?

postgresql - 安装 odoo 9 beta 会出现空白页面

sql - 将列添加到 %rowtype 的记录变量

arrays - PL/pgSQL 函数插入行数组

postgresql - 选择按日期排序的唯一值

JQuery 多维数组或对象或其他方法?

arrays - 仅基于 X 在数组中查找 cgpoint

sql - 检索前几个月的数据

postgresql - 如何从 pl/pgsql 函数中调用 shell 命令?