在 RETURNING 语句中使用记录作为函数参数

Use Record As Function Argument in RETURNING Statement

我有一个将记录作为参数的 plpgsql 函数。

我想在插入的 RETURNING 语句中调用此函数,但不确定将什么作为参数(* 不起作用)即

-- Postgres 12

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

我可以用什么代替 <the_new_record>

我不确定为什么您的示例不起作用,但我会尝试数据修改 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

查看更多

要将 record/row 传递给函数,您需要明确指定记录类型:

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