PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chọn dữ liệu vào một mảng Postgres

Bạn không thể sử dụng array_agg() để tạo mảng đa chiều, ít nhất không phải lên đến PostgreSQL 9.4.
(Nhưng Postgres 9.5 sắp tới gửi một biến thể mới của array_agg() điều đó có thể!)

Những gì bạn nhận được từ truy vấn của @Matt Ball là một loạt các bản ghi (the_table[] ).

Một mảng chỉ có thể chứa các phần tử của cùng một kiểu cơ sở. Bạn rõ ràng có số và loại chuỗi. Chuyển đổi tất cả các cột (chưa có) thành text để làm cho nó hoạt động.

Bạn có thể tạo một hàm tổng hợp cho điều này giống như tôi đã trình bày với bạn ở đây trước đây.

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

Gọi:

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

Lưu ý ARRAY[] bổ sung lớp để biến nó thành một mảng đa chiều (chính xác là 2 chiều).

Bản demo tức thì:

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. Tổng quan về Tham số kết nối sslpassword của PostgreSQL 13 libpq

  2. Cách cài đặt Haproxy và Keepalived

  3. Chuẩn hóa Unicode trong PostgreSQL 13

  4. Cách bỏ qua lỗi với psql \ copy meta-command

  5. SERIAL tùy chỉnh / tự động tăng thêm cho mỗi nhóm giá trị