PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menghapus array 2d menjadi array 1d dengan cepat di PostgreSQL?

Fungsi yang Anda temukan di jawaban lama saya tidak berskala dengan baik untuk array besar. Saya tidak pernah memikirkan array ukuran Anda, yang mungkin seharusnya menjadi satu set (tabel) sebagai gantinya.

Bagaimanapun, fungsi plpgsql ini menggantikan yang ada di direferensikan jawab . Memerlukan Postgres 9.1 atau lebih baru.

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;

40x lebih cepat dalam pengujian saya pada array 2d besar di Postgres 9.6.

STRICT untuk menghindari pengecualian untuk input NULL (sebagai dikomentari oleh 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. RailsTutorial 3.2 Ch 11 - Kesalahan sintaks PostgreSQL merusak umpan status

  2. PILIH atau PERFORM dalam fungsi PL/pgSQL

  3. Apa yang terjadi dengan duplikat saat menyisipkan banyak baris?

  4. Temukan pelanggan yang tidak berlangganan kembali dalam ambang batas langganan lama

  5. Singkirkan tanda kutip ganda dengan SQLalchemy untuk PostgreSQL