PostgreSQL supporta la chiamata di funzioni di restituzione di set in SELECT
clausola. Questo è in qualche modo deprecato ora che abbiamo LATERAL
ed è certamente sconsigliato perché ha un comportamento piuttosto irregolare, ma resta utile.
Nel tuo caso potresti scrivere:
SELECT
i.*,
(partition_into_months(i.start_date, i.stop_or_current_date)).*
FROM invoicable_interval i;
Tuttavia, ciò potrebbe comportare una chiamata a partition_into_months
per colonna restituita perché (fn).*
è sostanzialmente ampliato in macro in (fn).col1, (fn).col2, ...
. Per evitare ciò, puoi racchiuderlo in una sottoquery, ad es.
SELECT (x.i).*, (x.p).*
FROM
(
SELECT
i,
partition_into_months(i.start_date, i.stop_or_current_date) p
FROM invoicable_interval i
) x(i,p);
Nota che si incontreranno strani risultati in presenza di più funzioni di ritorno di set in SELECT
elenco. Non è un cross-join come ti aspetteresti. Ad esempio, confronta:
SELECT generate_series(1,4), generate_series(1,4)
a
SELECT generate_series(1,4), generate_series(1,3);