web-dev-qa-db-ja.com

plpythonuで複数の列(それぞれ複合型)を返す方法

複数の列を持つテーブルを返すplpythonu関数を作成しました。現在、複数のコンポーネントを持つ単一の列を返します。

私は遭遇しました this 回答これはA)少し古く、B)コンポーネントを関数の外のテーブルに分離するように要求します。

問題を示す簡単な関数は次のとおりです。

CREATE TYPE foo AS (a INT, b INT);
CREATE OR REPLACE FUNCTION bar () RETURNS SETOF foo AS $$
    return [(1,2),(3,4)]
$$ LANGUAGE plpythonu;

SELECT bar();

これは2つのレコードを返しますが、1つの列のみを返します。 2つのレコードと2つの列を持つテーブルを返すようにします。これは不可能ですか?それは奇妙に思われるかもしれませんが、1時間分のグーグルで私はどこにも行きませんでした。

2
spencerrecneps

これを行う簡単な方法は、次のようにbar()関数を呼び出すことです。

postgres@[local]:5432:postgres:=# SELECT * FROM bar();
 a | b
---+---
 1 | 2
 3 | 4
(2 rows)

Time: 0.622 ms
postgres@[local]:5432:postgres:=#

このコンテキストでは、2つの行と2つの列を持つレコードタイプとして返​​されます。

お役に立てば幸いです。 =)

2
Kassandry