Postgres array elemen selalu elemen dasar , yaitu skalar nilai-nilai. Sub-array bukan "elemen" di Postgres. Irisan array mempertahankan dimensi aslinya.
Anda dapat mengekstrak elemen dasar , yang merupakan nilai dari tipe data elemen skalar.
Atau Anda dapat mengekstrak irisan array , yang mempertahankan tipe data larik asli dan juga dimensi larik asli.
Ide Anda untuk mengambil sub-array sebagai "elemen" akan bertentangan dengan itu dan tidak diterapkan.
Manual mungkin lebih jelas dalam penjelasannya. Tapi setidaknya kita bisa menemukan:
Contoh pertama Anda mencoba mereferensikan elemen dasar, yang tidak ditemukan (Anda memerlukan dua indeks array dalam array 2-D). Jadi Postgres mengembalikan NULL.
Contoh ke-3 Anda hanya membungkus NULL yang dihasilkan dalam array baru.
Untuk meratakan irisan array (jadikan array 1-D) Anda dapat unnest()
dan masukkan set yang dihasilkan ke ARRAY
konstruktor
. Baik dalam subkueri berkorelasi atau dalam LATERAL
bergabung (memerlukan hal 9.3+). Mendemonstrasikan keduanya:
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;
Dan pastikan untuk membaca versi manual saat ini . referensi Anda menunjuk ke Postgres 9.1, tetapi kemungkinan Anda benar-benar menggunakan Postgres 9.4.
Terkait: