PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Mehrdimensionale PostgreSQL-Arrays

Postgres-Array Elemente sind immer Basiselemente , also skalar Werte. Sub-Arrays sind keine "Elemente" in Postgres. Array-Slices behalten die ursprünglichen Abmessungen bei.

Sie können entweder ein Basiselement extrahieren , bei dem es sich um einen Wert des Skalarelement-Datentyps handelt.
Oder Sie können ein Array-Slice extrahieren , der den ursprünglichen Array-Datentyp und auch die ursprünglichen Array-Dimensionen beibehält.

Ihre Idee, ein Unterarray als "Element" abzurufen, würde dem widersprechen und ist einfach nicht implementiert.

Das Handbuch könnte in seiner Erklärung klarer sein. Aber zumindest können wir Folgendes finden:

Dein 1. Beispiel versucht, auf ein Basiselement zu verweisen, das nicht gefunden wird (Sie würden zwei Array-Indizes in einem 2-D-Array benötigen). Postgres gibt also NULL zurück.
Dein drittes Beispiel verpackt einfach die resultierende NULL in ein neues Array.

Zum Abflachen ein Array-Slice (machen Sie es zu einem 1-D-Array) können Sie unnest() und füttern Sie den resultierenden Satz in einen neuen ARRAY Konstruktor . Entweder in einer korrelierten Unterabfrage oder in einem LATERAL beitreten (erfordert Seite 9.3+). Beides demonstrieren:

SELECT s.col[2:2][2:3] AS slice_arr
     , x.lateral_arr
     , ARRAY(SELECT unnest(s.col[2:2][2:3])) AS corr_arr
FROM  (SELECT ARRAY[[1,2,3],[4,5,6]] AS col) s
     , LATERAL (SELECT ARRAY(SELECT * FROM unnest(s.col[2:2][2:3])) AS lateral_arr) x;

Und lesen Sie unbedingt die aktuelle Version des Handbuchs . Ihre Referenzen verweisen auf Postgres 9.1, aber wahrscheinlich verwenden Sie tatsächlich Postgres 9.4.

Verwandte: