非互換
FUJITSU Enterprise Postgres 10では、PL/Pythonで複合型を多次元配列内で使用し、かつ、リストで指定した場合はエラーにするよう変更します。
複合型をリストで指定することができます。
[例]
=# 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 行)
複合型をリストで指定した場合はエラーにします。
[例]
=# 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)
対処方法
複合型を多次元配列内で使用する場合はリストではなく、タプルで指定するように変更してください。