Лучший способ сделать это - передать составной тип в качестве аргумента.
Вы можете использовать тип, который назван как таблица и автоматически создан с помощью CREATE TABLE
.
ЗдесьЭто рабочий пример с 300 столбцами:
CREATE TABLE wide (
i0 integer,
t0 text,
d0 date,
i1 integer,
t1 text,
d1 date,
i2 integer,
t2 text,
d2 date,
i3 integer,
t3 text,
d3 date,
[... many missing columns]
i99 integer,
t99 text,
d99 date
);
CREATE OR REPLACE PROCEDURE insert_wide(arg wide)
LANGUAGE plpgsql AS
$$BEGIN
INSERT INTO wide SELECT (arg).*;
END;$$;
CALL insert_wide(
ROW(
0,
'atext',
current_date + 0,
1,
'atext',
current_date + 1,
2,
'atext',
current_date + 2,
3,
'atext',
current_date + 3,
[again, many missing columns]
99,
'atext',
current_date + 99
)
);
Но я думаю, что если у вас есть таблицы с таким количеством столбцов, вы делаете что-то не так.