sql >> Databáze >  >> RDS >> PostgreSQL

Vícerozměrná pole PostgreSQL

prvky pole Postgres jsou vždy základní prvky , tedy skalární hodnoty. Dílčí pole nejsou „prvky“ v Postgresu. Řezy pole si zachovávají původní rozměry.

Můžete buď extrahovat základní prvek , což je hodnota datového typu skalárního prvku.
Nebo můžete extrahovat výseč pole , který zachová původní datový typ pole a také původní rozměry pole.

Váš nápad načíst dílčí pole jako „prvek“ by s tím byl v rozporu a není implementován.

Příručka může být ve svém vysvětlení jasnější. Ale alespoň můžeme najít:

Váš první příklad se pokusí odkazovat na základní prvek, který nebyl nalezen (ve 2D poli budete potřebovat dva indexy pole). Postgres tedy vrátí NULL.
Váš 3. příklad pouze zabalí výslednou hodnotu NULL do nového pole.

Chcete-li vyrovnat řez pole (udělejte z něj 1-D pole), můžete unnest() a vložte výslednou sadu do nového ARRAY konstruktor . Buď v korelovaném dílčím dotazu nebo v LATERAL připojit se (vyžaduje str. 9.3+). Předvedení obojího:

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;

A nezapomeňte si přečíst aktuální verzi příručky . vaše reference ukazují na Postgres 9.1, ale je pravděpodobné, že skutečně používáte Postgres 9.4.

Související:




  1. Manipulace s daty utf8mb4 z MySQL pomocí PHP

  2. Importovat výpis MySQL do databáze PostgreSQL

  3. Jak vytvořit pohled v PostgreSQL

  4. nelze uložit návratovou hodnotu z příkazu spuštění v mysql