PL/pgSQL行数组

bie*_*era 0 arrays postgresql plpgsql

以下是可能的吗?
我希望有一个用PL/pgSQL编写的过程,它接受类似"行集合"的参数,我的意思是我需要传递给类似字典的结构:

伪代码:

function_name({key1:val1,key2:val2, key3:val3 [, ...] })
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 8

使用现代PostgreSQL,您可以简化这样的功能.
测试设置:

CREATE TABLE tbl1 (id int, value text);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,无需显式创建类型(如果类型基于表行),则会隐式为每个表创建一个类型.
功能:

CREATE FUNCTION f_insert_rows_into_tbl1(tbl1[])
  RETURNS VOID AS
$BODY$
    INSERT INTO tbl1 (id,value)
    SELECT (a).*
    FROM   (SELECT unnest($1) AS a) x;
$BODY$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

呼叫:

SELECT f_insert_rows_into_tbl1('{"(1,foo)","(2,bar)"}');
Run Code Online (Sandbox Code Playgroud)

请注意行数组的输入语法!