sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL multidimensionelle arrays

Postgres array elementer er altid basiselementer , dvs. skalær værdier. Underarrays er ikke "elementer" i Postgres. Array-skiver bevarer oprindelige dimensioner.

Du kan enten udtrække et basiselement , som er en værdi af datatypen skalarelement.
Eller du kan udtrække et matrixudsnit , som bevarer den oprindelige matrixdatatype og også originale matrixdimensioner.

Din idé om at hente et underarray som "element" ville være i konflikt med det og er bare ikke implementeret.

Manualen er muligvis klarere i sin forklaring. Men vi kan i det mindste finde:

Dit første eksempel forsøger at referere til et basiselement, som ikke findes (du skal bruge to array-indekser i et 2-D-array). Så Postgres returnerer NULL.
Dit 3. eksempel pakker blot den resulterende NULL i et nyt array.

For at flade ud et array-udsnit (gør det til et 1-D-array) kan du unnest() og foder det resulterende sæt til en ny ARRAY konstruktør . Enten i en korreleret underforespørgsel eller i en LATERAL join (kræver side 9.3+). Demonstrerer begge dele:

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;

Og sørg for at læse den aktuelle version af manualen . dine referencer peger på Postgres 9.1, men chancerne er, at du faktisk bruger Postgres 9.4.

Relateret:




  1. Hvorfor flere JOINs er dårlige for forespørgsel eller ikke kommer i vejen for Optimizer

  2. Hvorfor kan mit C-program køre i git bash, men ikke i cmd?

  3. MySQL - Deltag og tæl rækker fra en anden tabel

  4. Sådan implementeres Teamcity med PostgreSQL for høj tilgængelighed