Тук не става дума за unnest като такова, а за много странното боравене на PostgreSQL с множество връщащи набор функции в SELECT
списък. Функции за връщане на набор в SELECT
не са част от стандарта ANSI SQL.
Ще откриете, че поведението е много по-разумно с LATERAL
заявки, които трябва да се предпочитат пред използването на функция за връщане на набор в FROM
колкото е възможно повече:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
напр.
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)
Единственият път, когато все още използвам множество връщащи функции в SELECT
е, когато искам да сдвоя стойности от функции, които връщат еднакъв брой редове. Нуждата от това ще изчезне в 9.4, с многоаргументен unnest
и с поддръжка за WITH ORDINALITY
.