Dit gaat niet over unnest als zodanig, maar over PostgreSQL's zeer vreemde behandeling van meerdere set-returning functies in de SELECT
lijst. Set-return functies in SELECT
maken geen deel uit van de ANSI SQL-standaard.
U zult merken dat uw gedrag veel gezonder is met LATERAL
query's, die de voorkeur verdienen boven het gebruik van een functie die een set retourneert in FROM
zoveel mogelijk:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
bijv.
regress=> select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
a | b
---+---
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
(6 rows)
De enige keer dat ik nog steeds meerdere set-returning-functies gebruik in SELECT
is wanneer ik waarden wil koppelen aan functies die beide hetzelfde aantal rijen retourneren. De noodzaak daarvoor zal verdwijnen in 9.4, met multi-argument unnest
en met ondersteuning voor WITH ORDINALITY
.