unnest()
은 모듈 intarray
이 아니지만 표준 PostgreSQL입니다. 그러나, 당신은 need version 8.4 or later이에요.
따라서 최신 버전 9.1로 업그레이드하면 문제를 해결할 수 있습니다. versioning policy of the PostgreSQL project을 참조하십시오.
현재 버전 8.3을 사용하는 Heroku의 공유 데이터베이스를 사용해야하는 경우 업그레이드가 필요합니다. Heroku Labs already offers 9.1.
@Abdul 댓글을 달았습니다, 당신이 구현할 수있는 가난한 사람의 unnest()
버전의 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;
그러나 이것은 단지 한 차원 배열 작동 점에 유의. (PostgreSQL을의 여러 차원으로 배열한다 unnest()
반대로) :
SELECT unnest('{1,2,3,4}'::int[]) -- works
SELECT unnest('{{1,2},{3,4},{5,6}}'::int[]) -- fails! (returns all NULLs)
을
당신 N 차원 배열에 대한 더 많은 기능을 구현할 수 :
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;
전화 :
SELECT unnest2('{{1,2},{3,4},{5,6}}'::int[]) -- works!
여러 차원을 처리하는 PL/pgSQL 함수를 작성할 수도 있습니다 ...
답장을 보내 주셔서 감사합니다. ($ 은 $ 1 [ 복귀 $ BODY AS anyelement를 SETOF) CREATE OR FUNCTION의 unnest (anyarray 교체 [를 I] generate_series (array_lower ($ 1,1) array_upper ($ 1,1)) 내가 FROM; $ 체 $ LANGUAGE 'sql'IMMUTABLE) 이 함수를 작성하여 postgresql에서 unnest 함수를 구현했습니다. 8.3 – Rafiu
@AbdulRafiu : 그래, 그렇게해야합니다. 나는 당신이 나의 대답에 대해 언급하고 약간을 추가했다. –
Brandstetter : 고맙습니다. – Rafiu