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

2.2.294 PL/Pythonにおける複合型配列の扱いの変更

非互換

FUJITSU Enterprise Postgres 10では、PL/Pythonで複合型を多次元配列内で使用し、かつ、リストで指定した場合はエラーにするよう変更します。

FUJITSU Enterprise Postgres 9.6以前の場合

複合型をリストで指定することができます。

[例]

=# CREATE TYPE mytype AS (c1 int, c2 int);
CREATE TYPE
=# CREATE FUNCTION list() RETURNS SETOF mytype[] AS $$ return [[1, 1], [1, 2]], [[2, 1], [2, 2]] $$ LANGUAGE plpythonu;
CREATE FUNCTION
=# SELECT list();
       list
-------------------
 {"(1,1)","(1,2)"}
 {"(2,1)","(2,2)"}
(2 行)
FUJITSU Enterprise Postgres 10以降の場合

複合型をリストで指定した場合はエラーにします。

[例]

=# CREATE TYPE mytype AS (c1 int, c2 int);
CREATE TYPE
=# CREATE FUNCTION list() RETURNS SETOF mytype[] AS $$ return [[1, 1], [1, 2]], [[2, 1], [2, 2]] $$ LANGUAGE plpythonu;
CREATE FUNCTION
=# SELECT list();
ERROR:  属性 "c1" が Python オブジェクト中に存在しません (12648)
HINT:  複合型を配列に入れて返したい場合、 "[('foo',)]" のように複合型を Pythonのタプルとして返すようにしてください。
CONTEXT:  戻り値を生成する際に (14845)
PL/Python 関数 "list" (14842)

対処方法

複合型を多次元配列内で使用する場合はリストではなく、タプルで指定するように変更してください。