unnest()
モジュールintarray
の一部ではありません 、ただし標準のPostgreSQLです。ただし、バージョン8.4が必要です強い> またはそれ以降
そのために。
したがって、より新しいバージョン、できれば現在のバージョン9.1にアップグレードすることで、これを解決できます。 PostgreSQLプロジェクトのバージョン管理ポリシー を参照してください。 。
現在バージョン8.3を使用しているHerokuの共有データベースを使用する必要がある場合は、アップグレードも検討しています。 HerokuLabsはすでに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;
ただし、これは1次元配列でのみ機能することに注意してください。 。 (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関数を作成することもできます...