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

Làm cách nào để tách mảng 2d thành mảng 1d một cách nhanh chóng trong PostgreSQL?

Hàm bạn tìm thấy trong câu trả lời cũ của tôi không mở rộng quy mô tốt cho các mảng lớn. Tôi chưa bao giờ nghĩ đến kích thước mảng của bạn, thay vào đó có lẽ nên là một tập hợp (một bảng).

Có thể như vậy, hàm plpgsql này thay thế hàm trong được tham chiếu câu trả lời . Yêu cầu Postgres 9.1 trở lên.

CREATE OR REPLACE FUNCTION unnest_2d_1d(ANYARRAY, OUT a ANYARRAY)
  RETURNS SETOF ANYARRAY AS
$func$
BEGIN
   FOREACH a SLICE 1 IN ARRAY $1 LOOP
      RETURN NEXT;
   END LOOP;
END
$func$  LANGUAGE plpgsql IMMUTABLE STRICT;

Nhanh hơn 40 lần trong thử nghiệm của tôi trên mảng 2d lớn trong Postgres 9.6.

STRICT để tránh ngoại lệ cho đầu vào NULL (dưới dạng nhận xét bởi IamIC ):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng các giá trị tham số cho lược đồ và bảng trong Postgresql

  2. Tăng tốc độ kiểm tra phạm vi cho các giá trị khóa được lồng trong mảng đối tượng jsonb

  3. Cách thêm chỉ mục duy nhất có điều kiện trên PostgreSQL

  4. Cách timeofday () hoạt động trong PostgreSQL

  5. Không thể khai báo biến bên trong hàm trên PostgreSQL