Как запустить INSERT ... SELECT в динамическом операторе PL / pgSQL? - PullRequest
0 голосов
/ 22 октября 2019

У меня есть функция, которая получает PK, имя динамической таблицы и JSON. Динамическая таблица создана ранее. Мне нужно ввести данные, полученные в этой таблице, для этого я использую EXECUTE FORMAT, но я не знаю, как использовать SELECT, чтобы бросить все JSON в таблицу. JSON имеет несколько объектов.

Вот пример кода:

CREATE FUNCTION FUNC_TEST(COD_FK BIGINT,
                              NAME_TABLE TEXT,
                              JSON JSONB)
    RETURNS VOID
    LANGUAGE plpgsql
AS
$$
BEGIN
    EXECUTE FORMAT(
            'INSERT INTO public.%I (
                COD_FK,
                A,
                B,
                C) L%',
            NAME_TABLE,
            (SELECT COD_FK,
                    (SRC ->> 'A') :: TEXT,
                    (SRC ->> 'B') :: BIGINT,
                    (SRC ->> 'C') :: TEXT
             FROM JSONB_ARRAY_ELEMENTS(JSON) SRC));
END
$$;

Возвращаемая ошибка:

ERROR: subquery must return only one column.

Как выполнить эту вставку?

...