Ich habe mit Arrays in einer meiner PostgreSQL-Datenbanken gespielt.
Ich habe eine Tabelle mit einem Geometriearray mit mindestens einem Element erstellt:
CREATE TABLE test_arrays (
polygons geometry(Polygon,4326)[],
CONSTRAINT non_empty_polygons_chk
CHECK ((COALESCE(array_length(polygons, 1), 0) <> 0))
);
Ich habe einige Zeilen hinzugefügt und die Tabelle nach dem ersten Element in jedem Geometriearray abgefragt:
SELECT polygons[0] FROM test_arrays;
Zu meiner Überraschung habe ich eine Liste mit leeren Zeilen bekommen!
Nach einigen Recherchen stellt sich heraus, dass PostgreSQL-Arrays einsbasiert sind :
Die Array-Indexnummern sind in eckigen Klammern angegeben. Standardmäßig verwendet PostgreSQL eine einbasierte Nummerierungskonvention für Arrays, dh ein Array von n Elementen beginnt mit Array [1] und endet mit Array [n].
Also SELECT polygons[0] FROM test_arrays;
arbeitete und gab den ersten polygon
jeder Reihe zurück.
Wenn PostgreSQL eine einbasierte Nummerierungskonvention verwendet, warum ist das Abfragen des 0. Elements zulässig und hat das Ergebnis eine Bedeutung?