Ada*_*tan 15 postgresql array postgresql-9.3
我一直在我的一个 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 个元素,结果是否有任何意义?
Erw*_*ter 16
Postgres 数组默认从 1 开始。在典型的应用程序中,最好坚持使用默认值。但是语法允许以任何 integer
数字开头。文档:
下标赋值允许创建不使用基于一的下标的数组。例如,可以分配 to
myarray[-2:7]
创建一个下标值从 -2 到 7 的数组。
例子:
SELECT ('[0:2]={1,2,3}'::int[])[0]; --> 1
SELECT ('[-7:-5]={1,2,3}'::int[])[-6]; --> 2
Run Code Online (Sandbox Code Playgroud)
您可以查询数组的任何索引,如果它不存在,您将获得 NULL。
有关的:
归档时间: |
|
查看次数: |
16765 次 |
最近记录: |