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

时间:2018-05-23 06:53:06

标签: postgresql pgadmin-4

我正在使用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

1 个答案:

答案 0 :(得分:2)

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;