Postgresql
為什麼 PostgreSQL 允許查詢數組000即使它使用基於 1 的數組?
我一直在我的一個 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
.有關的: