Tenho brincado com arrays em um dos meus bancos de dados PostgreSQL.
Eu criei uma tabela com uma matriz de geometria com pelo menos um elemento:
CREATE TABLE test_arrays (
polygons geometry(Polygon,4326)[],
CONSTRAINT non_empty_polygons_chk
CHECK ((COALESCE(array_length(polygons, 1), 0) <> 0))
);
Eu adicionei algumas linhas e consultei a tabela para o primeiro elemento em cada matriz de geometria:
SELECT polygons[0] FROM test_arrays;
Para minha surpresa, recebi uma lista de linhas vazias!
Após algumas pesquisas, descobriu-se que os arrays do PostgreSQL são baseados em um :
Os números subscritos da matriz são escritos entre colchetes. Por padrão, o PostgreSQL usa uma convenção de numeração baseada em um para arrays, isto é, um array de n elementos começa com array[1] e termina com array[n].
Então SELECT polygons[0] FROM test_arrays;
trabalhei e devolvi o primeiro polygon
de cada carreira.
Se o PostgreSQL usa uma convenção de numeração baseada em um, por que a consulta do elemento 0 é permitida e o resultado tem algum significado?
As matrizes do Postgres são baseadas em 1 por padrão. E em aplicativos típicos é melhor ficar com o padrão. Mas a sintaxe permite começar com qualquer
integer
número. O manual:Exemplos:
Você pode consultar qualquer índice de uma matriz, se não existir, você obtém
NULL
.Relacionado: