Ao retornar
SETOF record
as colunas de saída não são digitadas e não nomeadas. Assim, este formulário não pode ser usado diretamente em uma cláusula FROM como se fosse uma subconsulta ou uma tabela. Ou seja, ao emitir:
SELECT * from events_by_type_2('social');
obtemos este erro:
No entanto, ele pode ser "convertido" nos tipos de coluna corretos pelo chamador SQL. Este formulário funciona:
SELECT * from events_by_type_2('social') as (id bigint, name text);
e resulta em:
id | name ----+---------------- 1 | Dance Party 2 | Happy Hour ...
Por esse motivo
SETOF record
é considerado menos prático. Deve ser usado apenas quando os tipos de coluna dos resultados não são conhecidos antecipadamente.