Использовать запись как аргумент функции в операторе RETURNING - PullRequest
3 голосов
/ 08 апреля 2020

У меня есть функция plpg sql, которая принимает запись в качестве аргумента.

Я хотел бы вызвать эту функцию в операторе RETURNING вставки, но не уверен, что поставить в качестве аргумент (* не работает) т.е.

-- Postgres 12

INSERT INTO some_table (a, b, c)
VALUES .....
RETURNING
function_that_takes_record_argument(<the_new_record>)

Что я могу использовать вместо <the_new_record>?

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Чтобы передать запись / строку в функцию, вам нужно явно указать тип записи:

create table t(a int, b text);

create or replace function f(r record) returns int language plpgsql as $$
begin
    return r.a;
end $$;

insert into t values(2, 'b');

select f(t.*), f(t), f((a,b)::t) from t;

 f | f | f 
---+---+---
 2 | 2 | 2

insert into t values(3, 'c') returning f(t);

 f 
---
 3

2 голосов
/ 09 апреля 2020

Я не уверен, почему ваш пример не работает, но я бы попробовал CTE с модификацией данных:

WITH insert_result AS (
    INSERT INTO ... RETURNING * 
)
SELECT your_function_here(insert_result.*)

Подробнее см. https://www.postgresql.org/docs/current/queries-with.html#QUERIES -WITH-MODIFYING

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...