sql >> データベース >  >> RDS >> PostgreSQL

エラー:関数unnest(integer [])はpostgresqlに存在しません

    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関数を作成することもできます...




    1. eコマースのためのpostgresqlデータベース設計

    2. chart.jsでJSONデータを使用する方法は?

    3. OracleとMySQLのレプリケーションソリューションの比較

    4. PL / SQL:明示カーソルを参照カーソルに変換しますか?