PostgreSQL は Set Returning Function (2 番目の名前は表関数) をサポートしています。このクラスの関数は、スカラー値ではなくテーブルを返します。多くのユースケースがあります - 1つのユースケースは関数「unnest」です
関数の作成または置換 simple_srf(int)
SETOF int AS $$ を返します
始める
FOR i IN 1..$1
ループ
RETURN NEXT i; -- 値を結果にプッシュ
エンドループ;
戻る; -- 実行を終了する
終わり;
$$ LANGUAGE plpgsql IMMUTABLE STRICT;
postgres=# SELECT * FROM simple_srf(3);
simple_srf
------------
1
2
3
(3行)
関数 "string_to_array" は、セパレーターを配列に使用して文字列を解析します。
postgres=# select string_to_array('aaa*bbb*ccc','*');
string_to_array
-----------------
{aaa、bbb、ccc}
(1行)
Unnest は、配列をテーブルに変換する単純な関数です。plpgsql でのこの関数のソース コードは次のようになります。
-- 簡単にするために PostgreSQL 8.4 構文を使用します。
関数の作成または置換 unnest(anyarray)
SETOF anyelement AS $$ を返します
始める
FOR i IN array_lower($1,1) .. array_upper($1,1)
ループ
次の $1[i] を返します。
エンドループ;
戻る;
終わり;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
「Unnest」は多態的なセットの戻り関数です。PostgreSQL はより多くのビルトイン srf (表形式) 関数をサポートします - 例えば、generic_series や generate_subscripts
「unnest」関数の古い実装は次のとおりです。
関数の作成または置換 unnest(anyarray)
任意の要素を $$ として返します
SELECT $1[i] FROM generate_series(array_lower($1,1),array_upper($1,1)) g(i)
$$ LANGUAGE sql;
-- または generate_subscripts を使用
関数の作成または置換 unnest(anyarray)
任意の要素を $$ として返します
/*
* g はテーブルのエイリアスです
* i は列のエイリアスです
*/
SELECT $1[i] FROM generate_subscripts($1,1) g(i)
$$ LANGUAGE sql;