sql >> Database >  >> RDS >> PostgreSQL

Gegevens selecteren in een Postgres-array

U kunt array_agg() . niet gebruiken om multidimensionale arrays te produceren, in ieder geval niet tot PostgreSQL 9.4.
(Maar de komende Postgres 9.5 levert een nieuwe variant van array_agg() dat kan!)

Wat u uit de zoekopdracht van @Matt Ball haalt, is een reeks records (the_table[] ).

Een array kan alleen elementen van hetzelfde basistype bevatten. Je hebt duidelijk nummer- en tekenreekstypes. Converteer alle kolommen (die dat nog niet zijn) naar text om het te laten werken.

Je kunt hiervoor een verzamelfunctie maken, zoals ik je hier eerder heb laten zien.

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

Bel:

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

Let op de extra ARRAY[] laag om er een multidimensionale array van te maken (2-dimensionaal, om precies te zijn).

Directe 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. PL/SQL ORA-01422:exact ophalen levert meer op dan het gevraagde aantal rijen

  2. RANK, DENSE_RANK en ROW_NUMBER functies in Oracle

  3. SQRT() Voorbeelden in SQL Server

  4. Cheatsheet voor PostgreSQL-configuratie