我正在尝试从数组中将多行插入到我的表 'stuff' 中。下面是我的功能。我遇到的问题是,通过使用表 stuff[] 作为 _stuff_array 的类型,它期望主键作为初始值 - 因为 stuff 表有一个。有可能规避吗?或者,是否可以在函数声明的数组中设置预期的类型?如果是这样,如何?
非常感谢
函数定义:
CREATE OR REPLACE FUNCTION up_tbl_variadic(VARIADIC _stuff_array stuff[])
RETURNS void
LANGUAGE plpgsql AS
$$
BEGIN
INSERT INTO stuff (
X,
Y
)
SELECT *
FROM unnest(_stuff_array);
END;
$$;
表定义:
CREATE TABLE IF NOT EXISTS stuff
(
"id" BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
"X" TEXT NOT NULL,
"Y" TEXT NOT NULL
)
WITH (
OIDS = FALSE
)
您只需选择要为其插入值的列:
CREATE OR REPLACE FUNCTION up_tbl_variadic(VARIADIC _stuff_array stuff[])
RETURNS void
LANGUAGE plpgsql AS
$$
BEGIN
INSERT INTO stuff("X","Y")
SELECT x, y
FROM unnest(_stuff_array) as t(id, x, y);
END;
$$;
您将参数声明为variadic
不应该传递数组,而是传递记录列表。并且您需要为要传递的每一行创建一个三列记录
所以下面将插入两行
SELECT up_tbl_variadic((null, 'stuff', 'morestuff'),
(null, 'otherstuff', 'stuff again'));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句