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

KESALAHAN:fungsi unnest(integer[]) tidak ada di postgresql

unnest() bukan bagian dari modul intarray , tetapi dari PostgreSQL standar. Namun, Anda membutuhkan versi 8.4 atau lambat untuk itu.

Jadi Anda dapat mengatasi ini dengan memutakhirkan ke versi yang lebih baru, lebih disukai versi saat ini 9.1. Lihat kebijakan pembuatan versi proyek PostgreSQL .

Jika Anda harus menggunakan basis data bersama Heroku, yang saat ini menggunakan versi 8.3, mereka juga sedang mempertimbangkan untuk meningkatkannya. Heroku Labs sudah menawarkan 9.1 .

Seperti yang dikomentari @Abdul, Anda dapat mengimplementasikan unnest() . orang miskin di versi sebelum PostgreSQL 8.4 sendiri:

CREATE OR REPLACE FUNCTION unnest(anyarray)
  RETURNS SETOF anyelement AS
$BODY$
   SELECT $1[i] FROM generate_series(array_lower($1,1), array_upper($1,1)) i;
$BODY$ LANGUAGE sql IMMUTABLE;

Namun, perlu diketahui bahwa ini hanya berfungsi untuk array satu dimensi . (Berbeda dengan unnest() dari PostgreSQL yang mengambil array dengan banyak dimensi):

SELECT unnest('{1,2,3,4}'::int[])  -- works
SELECT unnest('{{1,2},{3,4},{5,6}}'::int[])  -- fails! (returns all NULLs)

Anda bisa mengimplementasikan lebih banyak fungsi untuk array n-dimensi:

CREATE OR REPLACE FUNCTION unnest2(anyarray) -- for 2-dimensional arrays
  RETURNS SETOF anyelement AS
$BODY$
SELECT $1[i][j]
FROM  (
    SELECT i, generate_series(array_lower($1,2), array_upper($1,2)) j
    FROM  (
        SELECT generate_series(array_lower($1,1), array_upper($1,1)) i
        ) x
    ) y;
$BODY$ LANGUAGE sql IMMUTABLE;

Telepon:

SELECT unnest2('{{1,2},{3,4},{5,6}}'::int[])  -- works!

Anda juga bisa menulis fungsi PL/pgSQL yang berhubungan dengan banyak dimensi ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres:ERROR:nilai terlalu panjang untuk variasi karakter tipe(255) Tidak menentukan bidang

  2. postgres array_agg ERROR:tidak dapat mengakumulasi array dengan dimensi berbeda

  3. Permintaan Rails (postgres) dengan array jsonb

  4. postgreSQL - psql \i :cara menjalankan skrip di jalur yang diberikan

  5. Periksa apakah array JSON Postgres berisi string