PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Rückgabetyp der SQL-Funktion:TABLE vs. SETOF-Datensätze

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.