Đây không phải là vấn đề không tốt như vậy, mà là về cách xử lý rất kỳ lạ của PostgreSQL đối với nhiều hàm trả về bộ trả về trong SELECT danh sách. Đặt các hàm trả về trong SELECT không phải là một phần của tiêu chuẩn ANSI SQL.
Bạn sẽ thấy hành vi tốt hơn nhiều với LATERAL các truy vấn, nên được ưu tiên hơn so với việc sử dụng hàm set-return trong FROM càng nhiều càng tốt:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
ví dụ:
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)
Lần duy nhất tôi vẫn sử dụng nhiều hàm trả về thiết lập trong SELECT là khi tôi muốn ghép nối các giá trị từ các hàm mà cả hai đều trả về cùng một số hàng. Nhu cầu về điều đó sẽ không còn nữa trong 9.4, với đa đối số unnest và với sự hỗ trợ cho WITH ORDINALITY .