Bei der Rückgabe von SETOF record
die Ausgabespalten sind nicht typisiert und nicht benannt. Daher kann dieses Formular nicht direkt in einer FROM-Klausel verwendet werden, als wäre es eine Unterabfrage oder eine Tabelle.
Das heißt, bei der Ausgabe von:
SELECT * from events_by_type_2('social');
wir erhalten diesen Fehler:
Es kann jedoch vom SQL-Aufrufer in die richtigen Spaltentypen "umgesetzt" werden. Dieses Formular funktioniert:
SELECT * from events_by_type_2('social') as (id bigint, name text);
und ergibt:
id | name ----+---------------- 1 | Dance Party 2 | Happy Hour ...
Aus diesem Grund SETOF record
gilt als wenig praktikabel. Es sollte nur verwendet werden, wenn die Spaltentypen der Ergebnisse nicht im Voraus bekannt sind.