Postgres可变参数函数添加多行
Postgres variadic function to add multiple rows
我正在尝试从一个数组中将多行插入到我的 table 'stuff' 中。下面是我的功能。我遇到的问题是,通过使用 table stuff[] 作为 _stuff_array 的类型,它期望主键作为初始值——因为 stuff table 有一个。有可能规避吗?或者,是否可以在函数声明中设置数组中预期的类型?如果可以,怎么做?
非常感谢
函数定义:
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;
$$;
Table定义:
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
)
您只需要 select 要为其插入值的列:
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'));
我正在尝试从一个数组中将多行插入到我的 table 'stuff' 中。下面是我的功能。我遇到的问题是,通过使用 table stuff[] 作为 _stuff_array 的类型,它期望主键作为初始值——因为 stuff table 有一个。有可能规避吗?或者,是否可以在函数声明中设置数组中预期的类型?如果可以,怎么做?
非常感谢
函数定义:
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;
$$;
Table定义:
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
)
您只需要 select 要为其插入值的列:
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'));