Postgres mảng phần tử luôn là phần tử cơ sở , tức là vô hướng các giá trị. Mảng con không phải là "phần tử" trong Postgres. Các lát mảng giữ lại kích thước ban đầu.
Bạn có thể trích xuất phần tử cơ sở , là một giá trị của kiểu dữ liệu phần tử vô hướng.
Hoặc bạn có thể trích xuất một lát mảng , giữ lại kiểu dữ liệu mảng ban đầu và cả kích thước mảng ban đầu.
Ý tưởng của bạn để truy xuất mảng con dưới dạng "phần tử" sẽ xung đột với mảng đó và không được triển khai.
Hướng dẫn sử dụng có thể rõ ràng hơn trong phần giải thích. Nhưng ít nhất chúng ta có thể tìm thấy:
Ví dụ đầu tiên của bạn cố gắng tham chiếu đến một phần tử cơ sở, phần tử này không được tìm thấy (bạn cần hai chỉ mục mảng trong một mảng 2-D). Vì vậy, Postgres trả về NULL.
Ví dụ thứ 3 của bạn chỉ cần bao bọc kết quả NULL trong một mảng mới.
Để làm phẳng một lát mảng (biến nó thành mảng 1-D) bạn có thể unnest()
và cung cấp tập hợp kết quả thành ARRAY
phương thức khởi tạo
. Trong một truy vấn con tương quan hoặc trong một LATERAL
tham gia (yêu cầu pg 9.3+). Thể hiện cả hai:
SELECT s.col[2:2][2:3] AS slice_arr
, x.lateral_arr
, ARRAY(SELECT unnest(s.col[2:2][2:3])) AS corr_arr
FROM (SELECT ARRAY[[1,2,3],[4,5,6]] AS col) s
, LATERAL (SELECT ARRAY(SELECT * FROM unnest(s.col[2:2][2:3])) AS lateral_arr) x;
Và hãy nhớ đọc phiên bản hiện tại của hướng dẫn này . các tham chiếu của bạn trỏ đến Postgres 9.1, nhưng rất có thể bạn đang thực sự sử dụng Postgres 9.4.
Có liên quan: