Wenn die Funktion einen einzelnen Datensatz zurückgibt, dann:
WITH cte AS (SELECT 1 a, 2 b)
SELECT my_function(a, b) FROM cte;
wird funktionieren. Wenn die Funktion jedoch eine SRF (Set-Returning-Function) ist, müssen Sie LATERAL verwenden, um die Datenbank wissen zu lassen, dass Sie die Ergebnisse der vorherigen Tabellen in der JOIN-Anweisung später in die Funktionen einspeisen möchten BEITRETEN. Dies wird folgendermaßen erreicht:
WITH cte AS (SELECT 1 a, 2 b)
SELECT * FROM cte, LATERAL my_function(a, b);
Das LATERAL bewirkt, dass PostgreSQL jede Zeile aus dem CTE nimmt und "my_function" mit den Werten aus dieser Zeile ausführt und die Ergebnisse dieser Funktion an die gesamte SELECT-Anweisung zurückgibt.