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?
quelle
Antworten:
Postgres-Arrays basieren standardmäßig auf 1. In typischen Anwendungen ist es am besten, die Standardeinstellung beizubehalten. Die Syntax erlaubt es jedoch, mit einer beliebigen
integer
Zahl zu beginnen . Die Dokumentation:Beispiele:
Sie können einen beliebigen Index eines Arrays abfragen. Wenn dieser nicht vorhanden ist, erhalten Sie NULL.
Verbunden:
quelle