私はubuntu 12.04でPostgresql 9.1を使用しています。
私の質問へのクレイグの回答に触発されたsetofタイプまたはsetofレコードの連結私はreturn query
、setof record
このplpgsql関数に、、およびシリーズジェネレーターを使用するとうまくいくと思いました:
create or replace function compute_all_pair_by_craig(id_obj bigint)
returns setof record as $$
begin
return query select o.id, generate_series(0,o.value) from m_obj as o;
end;
$$ language plpgsql;
実行中にエラーが発生します:
ERROR: set_valued function called in context that cannot accept a set
なにが問題ですか ?Craigとは逆に、関数に返すように指示しますsetof record
。
私はCraigとまったく同じように機能する何かを実現できます。つまり、型create type pair_id_value as (idx bigint, value integer)
を定義し、plpgsql関数がのsetof of pair_id_value
代わりにを返すようにしsetof record
ます。
しかし、この実用的な解決策を使用しても、なぜselect id, generate_series(0,13)
単独で2つの列に結果が返されるのかはまだわかりません...逆に、関数(setof pair_id_valueを返す)を呼び出すと、フィールドが次のように見える1つの列だけにreturn query select id, generate_series(0,my_obj.value) from my_obj
結果が返されますこの「(123123,0)」「(123123,1)」「(123123,2)」(3行)は明らかにタプルです。
一時テーブルを作成する必要がある/すべきですか?
BEGIN
あり、後にセミコロンがないRETURN QUERY
。これらのエラーを修正した後record
、戻るときにエラーを確認します。答えで説明します。