Se la funzione restituisce un singolo record, allora:
WITH cte AS (SELECT 1 a, 2 b)
SELECT my_function(a, b) FROM cte;
funzionerà. Tuttavia, se la funzione è una SRF (Set-Returning-Function), è necessario utilizzare LATERAL, per far sapere al database che si desidera inviare i risultati delle tabelle precedenti nell'istruzione JOIN alle funzioni successive nel GIUNTURA. Questo si ottiene in questo modo:
WITH cte AS (SELECT 1 a, 2 b)
SELECT * FROM cte, LATERAL my_function(a, b);
LATERAL farà sì che PostgreSQL prenda ogni riga dal CTE ed esegua "my_function" con i valori di quella riga, restituendo i risultati di quella funzione all'istruzione SELECT generale.