相关疑难解决方法(0)

为什么 PostgreSQL 允许查询 array[0] 即使它使用基于 1 的数组?

我一直在我的一个 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 个元素,结果是否有任何意义?

postgresql array postgresql-9.3

15
推荐指数
1
解决办法
2万
查看次数

标签 统计

array ×1

postgresql ×1

postgresql-9.3 ×1