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

Auswählen von Daten in einem Postgres-Array

Sie können array_agg() nicht verwenden mehrdimensionale Arrays zu erzeugen, zumindest nicht bis PostgreSQL 9.4.
(Aber das kommende Postgres 9.5 liefert eine neue Variante von array_agg() das kann!)

Was Sie aus der Abfrage von @Matt Ball herausbekommen, ist ein Array von Datensätzen (the_table[] ).

Ein Array kann nur Elemente desselben Basistyps enthalten. Sie haben offensichtlich Zahlen- und Zeichenfolgentypen. Wandeln Sie alle Spalten (die noch nicht vorhanden sind) in text um damit es funktioniert.

Sie können dafür eine Aggregatfunktion erstellen, wie ich es Ihnen hier zuvor demonstriert habe.

CREATE AGGREGATE array_agg_mult (anyarray)  (
    SFUNC     = array_cat
   ,STYPE     = anyarray
   ,INITCOND  = '{}'
);

Aufruf:

SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
FROM   tbl;

Beachten Sie das zusätzliche ARRAY[] Schicht, um daraus ein mehrdimensionales Array zu machen (zweidimensional, um genau zu sein).

Sofortdemo:

WITH tbl(id, txt) AS (
    VALUES
      (1::int, 'foo'::text)
     ,(2,      'bar')
     ,(3,      '}b",') -- txt has meta-characters
    )
    , x AS (
    SELECT array_agg_mult(ARRAY[ARRAY[id::text,txt]]) AS t
    FROM   tbl
    )
SELECT *, t[1][3] AS arr_element_1_1, t[3][4] AS arr_element_3_2
FROM   x;