PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Избиране на данни в Postgres масив

Не можете да използвате array_agg() за създаване на многоизмерни масиви, поне не до PostgreSQL 9.4.
(Но предстоящият Postgres 9.5 доставя нов вариант на array_agg() това може!)

Това, което получавате от заявката на @Matt Ball, е масив от записи (the_table[] ).

Масивът може да съдържа само елементи от същия базов тип. Очевидно имате типове число и низ. Преобразувайте всички колони (които все още не са) в text за да работи.

Можете да създадете обобщена функция за това, както ви демонстрирах тук преди.

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

Обадете се:

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

Обърнете внимание на допълнителния ARRAY[] слой, за да го превърнете в многоизмерен масив (2-измерен, за да бъдем точни).

Незабавна демонстрация:

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. Резултати от групови заявки по месец и година в postgresql

  2. Разлика между език sql и език plpgsql във функциите на PostgreSQL

  3. Как да сравним данни между две бази данни в PostgreSQL?

  4. Нечувствителни ли са имената на функциите в PostgreSQL?

  5. Изберете Номер на ред в postgres