拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 PostgreSQL将id回传到阵列中

PostgreSQL将id回传到阵列中

白鹭 - 2022-02-28 2073 0 0

我正在尝试在 postgreSQL 中创建一个函式,我需要在其中输入多行,并且在插入时,我需要获取每一行的 id,以便稍后在函式中使用它以插入另一个表。

我下面的功能部分是我正在使用的。我已经用 WITH 子句包装了它,以便以后可以使用 pages_ids。

create or replace function insert_webpages (query_domain_id int, query_page_titles text[], query_page_slugs text[])
returns table (new_webpage_id int[]) as
$$
DECLARE new_webpage_id int[];

BEGIN
  WITH webpage_rows AS (
  INSERT INTO webpages (domain_id, title, slug)
  VALUES (query_domain_id, unnest(query_page_titles), unnest(query_page_slugs))
  RETURNING id into new_webpage_id
  )
...

我目前面临的问题是我知道最后一行没有将所有 id 输入到 new_webpage_id 阵列中。

那么如何修复它,使其将新输入行的每个 id 输入到 new_webpage_id 阵列中?

uj5u.com热心网友回复:

values表达式无效,那里不允许设定回传函式(即unnestCTE 不需要into内部的子句,而是需要紧随其后的 select 陈述句。尝试

WITH webpage_rows(wr_id) AS
(
  INSERT INTO webpages (domain_id, title, slug)
  select query_domain_id, unnest(query_page_titles), unnest(query_page_slugs)
  returning id
)
select array_agg(wr_id) into new_webpage_id from webpage_rows;

不相关,但我认为拥有同名的变量和回传表列不是一个好主意。

uj5u.com热心网友回复:

试试这个 :

  WITH webpage_rows AS (
  INSERT INTO webpages (domain_id, title, slug)
  VALUES (query_domain_id, unnest(query_page_titles), unnest(query_page_slugs))
  RETURNING id -- id is to be replaced by the column of the table webpages and which must be aggregated into the array new_webpage_id
  )
SELECT array_agg(new_webpage_id)
  INTO new_webpage_id
  FROM webpage_rows
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *