Postgres 可变参数函数添加多行

用户973347

我正在尝试从数组中将多行插入到我的表 '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
)
a_horse_with_no_name

您只需选择要为其插入值的列:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章