PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

BŁĄD:funkcja unnest(integer[]) nie istnieje w postgresql

unnest() nie jest częścią modułu intarray , ale standardowego PostgreSQL. Jednak potrzebujesz wersji 8.4 lub później za to.

Możesz więc rozwiązać ten problem, aktualizując do nowszej wersji, najlepiej do obecnej wersji 9.1. Zobacz politykę wersjonowania projektu PostgreSQL .

Jeśli powinieneś korzystać ze współdzielonej bazy danych Heroku, która obecnie korzysta z wersji 8.3, oni również zastanawiają się nad aktualizacją. Heroku Labs oferuje już wersję 9.1 .

Jak skomentował @Abdul, możesz zaimplementować unnest() biednego człowieka w wersjach przed PostgreSQL 8.4 samodzielnie:

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;

Należy jednak pamiętać, że działa to tylko w przypadku tablic jednowymiarowych . (W przeciwieństwie do unnest() PostgreSQLa) który przyjmuje tablice o wielu wymiarach):

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

możesz zaimplementuj więcej funkcji dla tablic n-wymiarowych:

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;

Zadzwoń:

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

Możesz także napisać funkcję PL/pgSQL, która zajmuje się wieloma wymiarami...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykrywaj i usuwaj luki w szeregach czasowych

  2. Zarządzanie i monitorowanie bazy danych dla PostgreSQL 12

  3. Data i godzina uwzględniająca strefę czasową?

  4. zapytanie postgres z IN jest bardzo wolne

  5. Jak uzyskać całkowitą liczbę tabel w postgresql?