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?


Ответы (0 шт):