複数の列を持つテーブルを返す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時間分のグーグルで私はどこにも行きませんでした。
これを行う簡単な方法は、次のように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つの列を持つレコードタイプとして返されます。
お役に立てば幸いです。 =)