Jeśli funkcja zwraca pojedynczy rekord, to:
WITH cte AS (SELECT 1 a, 2 b)
SELECT my_function(a, b) FROM cte;
będzie działać. Jeśli jednak funkcja jest funkcją SRF (Set-Returning-Function), musisz użyć opcji LATERAL, aby poinformować bazę danych, że chcesz przekazać wyniki poprzednich tabel w instrukcji JOIN do funkcji później w PRZYSTĄP. Odbywa się to w ten sposób:
WITH cte AS (SELECT 1 a, 2 b)
SELECT * FROM cte, LATERAL my_function(a, b);
LATERAL spowoduje, że PostgreSQL pobierze każdy wiersz z CTE i uruchomi "my_function" z wartościami z tego wiersza, zwracając wyniki tej funkcji do ogólnej instrukcji SELECT.