array_upper 和 array_length 之间有什么功能区别吗?

Tho*_*ski 7 arrays postgresql

关于这两个数组函数的 postgres 文档非常薄弱。

我已经以几种不同的方式尝试了这两个函数,它们似乎返回了相同的结果。

SELECT array_length(array[[1, 2], [3, 4], [5, 6]], 1);
SELECT array_upper(array[[1, 2], [3, 4], [5, 6]], 1);

SELECT array_length(array[[1, 2], [3, 4], [5, 6]], 2);
SELECT array_upper(array[[1, 2], [3, 4], [5, 6]], 2);
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 8

是,有一点不同。PostgreSQL 数组下标默认从 1 开始,但它们不必

默认情况下,PostgreSQL 对数组使用基于一个的编号约定,即n元素数组以开头array[1]并以 结尾array[n]
[...] 下
标赋值允许创建不使用基于一个的下标的数组。例如,一个人可能会赋值为myarray[-2:7]创建一个数组,其下标值来自-2 to 7.
[...]
默认情况下,数组维度的下限索引值设置为 1。要表示具有其他下限的数组,可以在写入数组内容之前明确指定数组下标范围。

通常,您需要使用array_lowerandarray_upper而不是假设数组将在 开始1和结束array_length(a, n)