Postgres配列の要素 常に基本要素です 、つまりスカラー 値。サブ配列はPostgresの「要素」ではありません。配列スライスは元の寸法を保持します。
基本要素を抽出することができます 、これはスカラー要素のデータ型の値です。
または、配列スライスを抽出できます。 、元の配列データ型と元の配列次元も保持します。
サブ配列を「要素」として取得するというあなたの考えは、それと矛盾し、実装されていないだけです。
マニュアルの説明がわかりやすい場合があります。 しかし、少なくとも私たちは見つけることができます:
最初の例 見つからない基本要素を参照しようとします(2次元配列に2つの配列インデックスが必要です)。したがって、PostgresはNULLを返します。
3番目の例 結果のNULLを新しい配列でラップするだけです。
平らにする 配列スライス(1次元配列にする) unnest()
結果のセットを新しいARRAY
コンストラクター
。相関サブクエリまたはLATERAL
のいずれか 参加します(9.3ページ以上が必要です)。両方のデモンストレーション:
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;
また、最新バージョンのマニュアル を必ずお読みください。 。あなたの参照はPostgres9.1を指していますが、実際にPostgres9.4を使用している可能性があります。
関連: