在 PostgreSQL 函数中,是否可以将 UNNEST 的结果(来自函数输入的整数数组)与从 CTE INSERT 返回的 ID 连接起来?
我有 PostgreSQL 表,例如:
CREATE TABLE public.message (
id SERIAL PRIMARY KEY,
content TEXT
);
CREATE TABLE public.message_tag (
id SERIAL PRIMARY KEY,
message_id INTEGER NOT NULL CONSTRAINT message_tag_message_id_fkey REFERENCES public.message(id) ON DELETE CASCADE,
tag_id INTEGER NOT NULL CONSTRAINT message_tag_tag_id_fkey REFERENCES public.tag(id) ON DELETE CASCADE
);
我想创建一个 PostgreSQL 函数,该函数接受 的输入content
和tag_id
. 这是用于图形的。我想在一个函数中完成这一切,所以我得到了一个突变。
这是我到目前为止所得到的。我不知道如何UNNEST
跨从 CTE 返回的 id 加入。
CREATE FUNCTION public.create_message(content text, tags Int[])
RETURNS public.message
AS $$
-- insert to get primary key of message, for many to many message_id
WITH moved_rows AS (
INSERT INTO public.message (content)
RETURNING *;
)
-- many to many relation
INSERT INTO public.message_tag
SELECT moved_rows.id as message_id, tagInput.tag_id FROM moved_rows, UNNEST(tags) as tagInput;
RETURNING *
$$ LANGUAGE sql VOLATILE STRICT;