PostgreSQL CTE 记录作为函数的参数

Jam*_*mmy 1 postgresql

我有一个函数接受两个整数作为参数my_function(input_a, input_b)。有没有一种简单的方法可以将 CTE 的结果(返回input_a, input_b 的记录)传递到函数中?

我应该考虑使用 for 循环编写自定义函数还是有更好的方法?

小智 5

如果该函数返回单个记录,则:

WITH cte AS (SELECT 1 a, 2 b)
SELECT my_function(a, b) FROM cte;
Run Code Online (Sandbox Code Playgroud)

将工作。但是,如果函数是 SRF(Set-Returning-Function),那么您需要使用 LATERAL,让数据库知道您想将 JOIN 语句中先前表的结果提供给稍后在加入。这是这样完成的:

WITH cte AS (SELECT 1 a, 2 b)
SELECT * FROM cte, LATERAL my_function(a, b);
Run Code Online (Sandbox Code Playgroud)

LATERAL 将导致 PostgreSQL 从 CTE 中获取每一行并使用该行中的值运行“my_function”,将该函数的结果返回到整个 SELECT 语句。