PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wybieranie danych do tablicy Postgres

Nie możesz użyć array_agg() do tworzenia tablic wielowymiarowych, przynajmniej nie do PostgreSQL 9.4.
(Ale nadchodzący Postgres 9.5 dostarcza nowy wariant array_agg() to może!)

To, co otrzymujesz z zapytania @Matt Ball, to tablica rekordów (the_table[] ).

Tablica może zawierać tylko elementy tego samego typu podstawowego. Oczywiście masz typy liczbowe i łańcuchowe. Konwertuj wszystkie kolumny (które jeszcze nie są) na text aby to działało.

Możesz do tego utworzyć funkcję agregującą, tak jak ci już to zademonstrowałem.

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

Zadzwoń:

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

Zwróć uwagę na dodatkowy ARRAY[] warstwy, aby uczynić ją wielowymiarową tablicą (ściślej dwuwymiarową).

Natychmiastowe 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. BeanCreationException:Błąd podczas tworzenia fasoli o nazwie „flywayInitializer”

  2. Wielokrotne wywołanie funkcji zwracającej zestaw z argumentem tablicowym

  3. Jak wykonać zapytanie za pomocą pól w nowym typie danych PostgreSQL JSON?

  4. Wyszukaj w tablicy JSON obiekt zawierający wartość pasującą do wzorca

  5. Co nowego w PgBouncerze 1.6