Dette handler ikke som sådan om unød, men om PostgreSQL's meget mærkelige håndtering af flere sæt-returnerende funktioner i SELECT
liste. Indstil returnerende funktioner i SELECT
er ikke en del af ANSI SQL-standarden.
Du vil finde adfærd meget mere fornuftig med LATERAL
forespørgsler, som bør foretrækkes frem for at bruge en sæt-retur-funktion i FROM
så meget som muligt:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
f.eks.
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)
Den eneste gang jeg stadig bruger flere sæt-returnerende funktioner i SELECT
er når jeg vil parre værdier fra funktioner, der begge returnerer det samme antal rækker. Behovet for det vil forsvinde i 9.4, med multi-argument unnest
og med understøttelse af WITH ORDINALITY
.