Nếu hàm trả về một bản ghi thì:
WITH cte AS (SELECT 1 a, 2 b)
SELECT my_function(a, b) FROM cte;
sẽ làm việc. Tuy nhiên, nếu hàm là SRF (Set-Return-Function), thì bạn cần sử dụng LATERAL, để cho cơ sở dữ liệu biết rằng bạn muốn cung cấp kết quả của các bảng trước trong câu lệnh JOIN cho các hàm sau này trong THAM GIA. Điều này được thực hiện như vậy:
WITH cte AS (SELECT 1 a, 2 b)
SELECT * FROM cte, LATERAL my_function(a, b);
LATERAL sẽ khiến PostgreSQL lấy từng hàng từ CTE và chạy "my_ functions" với các giá trị từ hàng đó, trả về kết quả của hàm đó cho câu lệnh SELECT tổng thể.