Postgresql

為什麼 PostgreSQL 允許查詢數組000即使它使用基於 1 的數組?

  • November 13, 2021

我一直在我的一個 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 $$並以數組結尾$$ n $$.

所以SELECT polygons[0] FROM test_arrays;工作並返回polygon每一行的第一行。

如果 PostgreSQL 使用從 1 開始的編號約定,為什麼允許查詢第 0 個元素,結果是否有任何意義?

Postgres 數組預設是從 1 開始的。在典型應用程序中,最好堅持使用預設值。但是語法允許以任何 integer數字開頭。手冊:

下標賦值允許創建不使用從一開始的下標的數組。例如,可以賦值為myarray[-2:7]創建一個下標值從 -2 到 7 的數組。

例子:

SELECT ('[0:2]={1,2,3}'::int[])[0];    --> 1
SELECT ('[-7:-5]={1,2,3}'::int[])[-6]; --> 2 

您可以查詢數組的任何索引,如果它不存在,您會得到NULL.

有關的:

引用自:https://dba.stackexchange.com/questions/117670