sql >> Databasteknik >  >> RDS >> PostgreSQL

Välja data till en Postgres-array

Du kan inte använda array_agg() för att producera flerdimensionella arrayer, åtminstone inte upp till PostgreSQL 9.4.
(Men den kommande Postgres 9.5 skickar en ny variant av array_agg() det kan!)

Det du får ut av @Matt Balls fråga är en rad poster (the_table[] ).

En array kan bara innehålla element av samma bastyp. Du har uppenbarligen nummer och strängtyper. Konvertera alla kolumner (som inte redan är det) till text för att få det att fungera.

Du kan skapa en samlad funktion för detta som jag visade för dig här tidigare.

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

Ring:

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

Notera den extra ARRAY[] lager för att göra det till en flerdimensionell array (2-dimensionell, för att vara exakt).

Omedelbar 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. Oracle 10g express hemsida kommer inte upp

  2. Hur PATINDEX()-funktionen fungerar i SQL Server (T-SQL)

  3. Kan inte använda en MySQL-anslutning för entity framework 6

  4. För- och nackdelar med att använda SqlCommand Prepare i C#?