python & postgresql: передача больших массивов данных в хранимые функции для выполнения многократного INSERT
в python коде есть список списков
arr = list()
каждый элемент которого представляет собой список из 5 элементов (int, str, str, int, str)
хочу передать этот массив в хранимую процедуру postgresql и записать всё за 1 раз в БД, чтобы операция была максимально быстрой
использую библиотеку psycopg2:
выполняю передачу данных как:
cursor.callproc('add_records', id, arr)
хранимая процедура выглядит так:
CREATE OR REPLACE FUNCTION add_records(
in__id integer,
in__data record_type[])
RETURNS void
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
AS $BODY$
BEGIN
INSERT INTO table_t (id, f1, f2, f3, f4, f5, created_at, modified_at)
SELECT
in__id,
r.*,
NOW(),
NOW()
FROM UNNEST(in__data) AS r;
END;
$BODY$;
а тип record_type:
CREATE TYPE record_type AS
(
f1 integer,
f2 character varying,
f3 character varying,
f4 integer,
f5 character varying
);
Но добавление в table_t не происходит даже нескольких записей.
Использование вместо record_type anyarray тоже не помогает
Подскажите в чём может быть дело? Как делать многократные insert через хранимки в python?