Avec PostgreSQL moderne, vous pouvez simplifier une telle fonction.
Configuration du test :
CREATE TABLE tbl1 (id int, value text);
Pas besoin de créer explicitement un type dans ce cas (si le type est basé sur une ligne de tableau), il est créé implicitement pour chaque tableau.
Fonction :
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;
Appel :
SELECT f_insert_rows_into_tbl1('{"(1,foo)","(2,bar)"}');
Notez la syntaxe d'entrée pour un tableau de lignes !