我一直在我的一个 PostgreSQL 数据库中使用数组。
我创建了一个包含至少一个元素的几何数组的表:
CREATE TABLE test_arrays (
polygons geometry(Polygon,4326)[],
CONSTRAINT non_empty_polygons_chk
CHECK ((COALESCE(array_length(polygons, 1), 0) <> 0))
);
Run Code Online (Sandbox Code Playgroud)
我添加了几行,并在表中查询每个几何数组中的第一个元素:
SELECT polygons[0] FROM test_arrays;
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我得到了一个空行列表!
经过一些研究,事实证明PostgreSQL 数组是基于一个的:
数组下标数字写在方括号内。默认情况下,PostgreSQL 使用基于 1 的数组编号约定,即 n 个元素的数组以 array[1] 开头,以 array[n] 结尾。
所以SELECT polygons[0] FROM test_arrays;
工作并返回polygon
每一行的第一行。
如果 PostgreSQL 使用基于 1 的编号约定,为什么允许查询第 0 个元素,结果是否有任何意义?