PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL CTE registra come parametri per funzionare

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.