我一直在我的一个 PostgreSQL 数据库中使用数组。
我创建了一个包含至少一个元素的几何数组的表:
CREATE TABLE test_arrays (
polygons geometry(Polygon,4326)[],
CONSTRAINT non_empty_polygons_chk
CHECK ((COALESCE(array_length(polygons, 1), 0) <> 0))
);
我添加了几行,并在表中查询每个几何数组中的第一个元素:
SELECT polygons[0] FROM test_arrays;
令我惊讶的是,我得到了一个空行列表!
经过一番研究,事实证明PostgreSQL 数组是基于 1 的:
数组下标数字写在方括号内。默认情况下,PostgreSQL 对数组使用从 1 开始的编号约定,即一个包含 n 个元素的数组以 array[1] 开头并以 array[n] 结尾。
所以SELECT polygons[0] FROM test_arrays;
工作并返回polygon
每一行的第一行。
如果 PostgreSQL 使用从 1 开始的编号约定,为什么允许查询第 0 个元素,结果是否有任何意义?
Postgres 数组默认是从 1 开始的。在典型应用程序中,最好坚持使用默认值。但是语法允许以任何
integer
数字开头。手册:例子:
您可以查询数组的任何索引,如果它不存在,您会得到
NULL
.有关的: