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

Valg af data i et Postgres-array

Du kan ikke bruge array_agg() at producere multidimensionelle arrays, i hvert fald ikke op til PostgreSQL 9.4.
(Men den kommende Postgres 9.5 sender en ny variant af array_agg() det kan!)

Det, du får ud af @Matt Balls forespørgsel, er en række poster (the_table[] ).

Et array kan kun indeholde elementer af samme basistype. Du har åbenbart tal- og strengtyper. Konverter alle kolonner (der ikke allerede er det) til text for at få det til at fungere.

Du kan oprette en samlet funktion til dette, som jeg har demonstreret for dig her før.

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

Ring til:

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

Bemærk den ekstra ARRAY[] lag for at gøre det til et multidimensionelt array (2-dimensionelt, for at være præcis).

Øjeblikkelig demo:

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;


  1. Psql kunne ikke oprette forbindelse til serveren:Ingen sådan fil eller mappe, 5432 fejl?

  2. Hvad betyder det, når en PostgreSQL-proces er inaktiv i transaktionen?

  3. SQL:parse for-, mellem- og efternavn fra et fuldnavnsfelt

  4. UTF-8:Generelt? Beholder? Unicode?