SETOF record
を返す場合 出力列は型指定されておらず、名前も付けられていません。したがって、このフォームは、サブクエリまたはテーブルであるかのように、FROM句で直接使用することはできません。
つまり、発行する場合:
SELECT * from events_by_type_2('social');
このエラーが発生します:
ただし、SQL呼び出し元は正しい列タイプに「キャスト」できます。このフォームは機能します:
SELECT * from events_by_type_2('social') as (id bigint, name text);
結果は次のようになります:
id | name ----+---------------- 1 | Dance Party 2 | Happy Hour ...
このため、SETOF record
あまり実用的ではないと考えられています。結果の列タイプが事前にわからない場合にのみ使用してください。