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'));