如何在 Postgresql 中 return 多个 INSERTED ID?
How to return multiple INSERTED ID's in Postgresql?
我有一个函数有两个参数,第一个是整数,第二个是 varchars 数组。
我只想插入之前没有为活动插入的哈希,然后 return 插入的 ID — 在本例中,campaigns_urls
的 url_hash
字段table — 但我不断收到以下错误:
ERROR: column "hash" does not exist LINE 10: RETURNING "hash"
^
HINT: There is a column named "hash" in table "*SELECT*", but it cannot be referenced from this part of the query.
我正在调用这样的函数:
-- SELECT * FROM assign_urls_to_campaign(1,'{Xelgb20Lw}')
CREATE OR REPLACE FUNCTION public.assign_urls_to_campaign(
param_campaign_id integer,
param_hashes character varying(20)[]
)
RETURNS character varying(20)
LANGUAGE 'plpgsql'
VOLATILE
AS $BODY$
BEGIN
INSERT INTO campaigns_urls ("campaign_id", "url_hash")
SELECT
param_campaign_id as "id", "P"."hash"
FROM "urls" AS "U"
RIGHT OUTER JOIN (
SELECT hash FROM UNNEST(param_hashes) AS "hash"
) AS "P"
ON "U"."hash" = "P"."hash"
WHERE "U"."hash" ISNULL
RETURNING "hash";
END;
$BODY$;
还有更多问题:
如果 returns 超过一行,则应在 RETURNS
.
之后使用 SETOF
关键字
PlpgSQL 函数需要 RETURN
语句 - 在本例中为 RETURN QUERY
.
create table test(a int);
create or replace function foo(int)
returns setof int as $$
begin
return query
insert into test
select v from generate_series(1,) g(v)
returning a;
end;
$$ language plpgsql;
postgres=# select * from foo(3);
┌─────┐
│ foo │
╞═════╡
│ 1 │
│ 2 │
│ 3 │
└─────┘
(3 rows)
我有一个函数有两个参数,第一个是整数,第二个是 varchars 数组。
我只想插入之前没有为活动插入的哈希,然后 return 插入的 ID — 在本例中,campaigns_urls
的 url_hash
字段table — 但我不断收到以下错误:
ERROR: column "hash" does not exist LINE 10: RETURNING "hash"
^
HINT: There is a column named "hash" in table "*SELECT*", but it cannot be referenced from this part of the query.
我正在调用这样的函数:
-- SELECT * FROM assign_urls_to_campaign(1,'{Xelgb20Lw}')
CREATE OR REPLACE FUNCTION public.assign_urls_to_campaign(
param_campaign_id integer,
param_hashes character varying(20)[]
)
RETURNS character varying(20)
LANGUAGE 'plpgsql'
VOLATILE
AS $BODY$
BEGIN
INSERT INTO campaigns_urls ("campaign_id", "url_hash")
SELECT
param_campaign_id as "id", "P"."hash"
FROM "urls" AS "U"
RIGHT OUTER JOIN (
SELECT hash FROM UNNEST(param_hashes) AS "hash"
) AS "P"
ON "U"."hash" = "P"."hash"
WHERE "U"."hash" ISNULL
RETURNING "hash";
END;
$BODY$;
还有更多问题:
如果 returns 超过一行,则应在
RETURNS
. 之后使用 PlpgSQL 函数需要
RETURN
语句 - 在本例中为RETURN QUERY
.create table test(a int); create or replace function foo(int) returns setof int as $$ begin return query insert into test select v from generate_series(1,) g(v) returning a; end; $$ language plpgsql; postgres=# select * from foo(3); ┌─────┐ │ foo │ ╞═════╡ │ 1 │ │ 2 │ │ 3 │ └─────┘ (3 rows)
SETOF
关键字