関数が単一のレコードを返す場合:
WITH cte AS (SELECT 1 a, 2 b)
SELECT my_function(a, b) FROM cte;
動作します。ただし、関数がSRF(Set-Returning-Function)の場合は、LATERALを使用して、JOINステートメントの前のテーブルの結果を後で関数にフィードすることをデータベースに通知する必要があります。加入。これは次のように実行されます:
WITH cte AS (SELECT 1 a, 2 b)
SELECT * FROM cte, LATERAL my_function(a, b);
LATERALにより、PostgreSQLはCTEから各行を取得し、その行の値を使用して「my_function」を実行し、その関数の結果をSELECTステートメント全体に返します。