Si la fonction renvoie un seul enregistrement alors :
WITH cte AS (SELECT 1 a, 2 b)
SELECT my_function(a, b) FROM cte;
marchera. Cependant, si la fonction est une SRF (Set-Returning-Function), alors vous devez utiliser LATERAL, pour faire savoir à la base de données que vous voulez alimenter les résultats des tables précédentes dans l'instruction JOIN vers les fonctions plus tard dans le REJOINDRE. Ceci est accompli comme suit :
WITH cte AS (SELECT 1 a, 2 b)
SELECT * FROM cte, LATERAL my_function(a, b);
Le LATERAL obligera PostgreSQL à prendre chaque ligne du CTE et à exécuter "my_function" avec les valeurs de cette ligne, renvoyant les résultats de cette fonction à l'instruction SELECT globale.