ページの先頭行へ戻る
Enterprise Postgres 17 リリース情報

2.2.284 選択リストに集合を返す関数を指定した場合の動作変更

非互換

FUJITSU Enterprise Postgres 10では、選択リストに集合を返す関数を複数指定し、これらが異なる行数を返す場合、行数が少ない結果はNULLを加えて最も長い結果に一致するよう変更します。また、集合を返す関数をCASE式やCOALESCE式に指定した場合はエラーにするよう変更します。

FUJITSU Enterprise Postgres 9.6以前の場合

集合を返す関数を同時に終了するまで実行し、関数の最小公倍数の周期に等しい行数を返します。また、CASE式やCOALESCE式にも指定できます。

[例]

=# SELECT generate_series(1,2), generate_series(1,3);
generate_series  | generate_series
-----------------+-----------------
               1 |               1
               2 |               2
               1 |               3
               2 |               1
               1 |               2
               2 |               3
(6 行)
=# select case when true then generate_series(1,2) else null end;
case
------
    1
    2
(2 行)
FUJITSU Enterprise Postgres 10以降の場合

行数が少ない場合はNULLを加えた結果を返します。また、集合を返す関数はCASE式やCOALESCE式には指定できません。

[例]

=# SELECT generate_series(1,2), generate_series(1,3);
generate_series  | generate_series
-----------------+-----------------
               1 |               1
               2 |               2
                 |               3
(3 行)
=# select case when true then generate_series(1,2) else null end;
ERROR:  set-returning functions are not allowed in CASE
行 1: select case when true then generate_series(1,2) else null en...
                                 ^
HINT:  You might be able to move the set-returning function into a LATERAL FROM item.

対処方法

ありません。