Ini bukan tentang unnest seperti itu, tetapi tentang penanganan PostgreSQL yang sangat aneh dari beberapa fungsi pengembalian set di SELECT daftar. Mengatur fungsi pengembalian di SELECT bukan bagian dari standar SQL ANSI.
Anda akan menemukan perilaku yang jauh lebih waras dengan LATERAL kueri, yang harus lebih disukai daripada menggunakan fungsi pengembalian set di FROM sebanyak mungkin:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
misalnya
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)
Satu-satunya waktu saya masih menggunakan beberapa fungsi pengembalian set di SELECT adalah ketika saya ingin memasangkan nilai dari fungsi yang keduanya mengembalikan jumlah baris yang sama. Kebutuhan untuk itu akan hilang dalam 9.4, dengan multi-argumen unnest dan dengan dukungan untuk WITH ORDINALITY .