Al devolver SETOF record
las columnas de salida no se escriben ni se nombran. Por lo tanto, este formulario no se puede usar directamente en una cláusula FROM como si fuera una subconsulta o una tabla.
Es decir, al emitir:
SELECT * from events_by_type_2('social');
obtenemos este error:
Sin embargo, la persona que llama SQL puede "convertirlo" en los tipos de columna correctos. Este formulario funciona:
SELECT * from events_by_type_2('social') as (id bigint, name text);
y da como resultado:
id | name ----+---------------- 1 | Dance Party 2 | Happy Hour ...
Por este motivo SETOF record
se considera menos práctico. Debe usarse solo cuando los tipos de columna de los resultados no se conocen de antemano.