在 PostgreSQL 中对二维数组进行切片时的行为不一致

Inconsistent behavior when slicing a 2d array in PostgreSQL

假设我有一个二维数组:

# SELECT ARRAY[ARRAY[1,2], ARRAY[3,4]];
     array     
---------------
 {{1,2},{3,4}}
(1 row)

现在,如果我想获得每个内部数组的 第一个元素 ,添加 (...)[:][1] 就可以了:

# SELECT (ARRAY[ARRAY[1,2], ARRAY[3,4]])[:][1];
   array   
-----------
 {{1},{3}}
(1 row)

BUT:如果我想获得每个内部数组的第二个元素,我必须选择添加(...)[:][2:2],因为 (...)[:][2] 会再次 return 未触及的数组

# SELECT (ARRAY[ARRAY[1,2], ARRAY[3,4]])[:][2];
     array     
---------------
 {{1,2},{3,4}}
(1 row)

# SELECT (ARRAY[ARRAY[1,2], ARRAY[3,4]])[:][2:2];
   array   
-----------
 {{2},{4}}
(1 row)

这种不一致行为的原因是什么?

我认为 documentation 很好地解释了这一点:

If any dimension is written as a slice, i.e., contains a colon, then all dimensions are treated as slices. Any dimension that has only a single number (no colon) is treated as being from 1 to the number specified.

也就是说,当您使用切片时,Postgres 期望 所有 维度都是切片。没有的默认为1:n.