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

LỖI:hàm unnest (số nguyên []) không tồn tại trong postgresql

unnest() không phải là một phần của mô-đun intarray , nhưng là PostgreSQL tiêu chuẩn. Tuy nhiên, bạn cần phiên bản 8.4 trở lên cho điều đó.

Vì vậy, bạn có thể giải quyết vấn đề này bằng cách nâng cấp lên phiên bản mới hơn, tốt nhất là phiên bản 9.1 hiện tại. Xem chính sách lập phiên bản của dự án PostgreSQL .

Nếu bạn nên sử dụng cơ sở dữ liệu được chia sẻ của Heroku, hiện đang sử dụng phiên bản 8.3, họ cũng đang xem xét nâng cấp. Heroku Labs đã cung cấp 9.1 .

Như @Abdul đã nhận xét, bạn có thể triển khai unnest() của một người nghèo trong các phiên bản trước PostgreSQL 8.4:

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;

Tuy nhiên, hãy lưu ý rằng điều này chỉ hoạt động đối với mảng một chiều . (Trái ngược với unnest() của PostgreSQL lấy mảng có nhiều thứ nguyên):

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

Bạn có thể triển khai nhiều hàm hơn cho mảng n-chiều:

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;

Gọi:

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

Bạn cũng có thể viết một hàm PL / pgSQL xử lý nhiều thứ nguyên ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chia tỷ lệ kết nối trong PostgreSQL bằng cách sử dụng gộp kết nối

  2. SQL - thứ tự của các điều kiện OR có quan trọng không?

  3. Vấn đề đồng thời với psycopg2, Redshift và unittest

  4. Các cột trong bảng động dựa trên tùy chọn của người dùng

  5. NOT IN trong postgresql không hoạt động